最佳答案
在 如何动态更新一个循环中的一个情节在 ipython 笔记本(在一个单元格) 的答案中,给出了一个示例,说明如何在 Python 循环中动态更新 Jupiter 笔记本中的情节。然而,这是通过在每次迭代中破坏和重新创建情节来实现的,其中一个线程中的一条评论指出,这种情况可以通过使用新的 %matplotlib nbagg
魔法来改进,它提供了嵌入在笔记本中的交互式图形,而不是静态图像。
然而,就我所知,这个美妙的新 nbagg
特性似乎完全没有文档记录,而且我无法找到一个如何使用它来动态更新图表的例子。因此,我的问题是,如何使用 nbag 后端有效地更新 Jupiter/Python 笔记本中的现有情节?因为在 matplotlib 中动态更新绘图是一个棘手的问题,一个简单的工作示例将是一个巨大的帮助。指向有关该主题的任何文档的指针也会非常有帮助。
为了弄清楚我的要求: 我想要做的是运行一些模拟代码进行几次迭代,然后绘制其当前状态的图,然后再运行几次迭代,然后更新该图以反映当前状态,以此类推。所以这个想法是画一个图,然后,没有任何交互从用户,更新数据的情节,而不破坏和重新创建整个事情。
下面是对上面链接问题的答案稍作修改的代码,它通过每次重新绘制整个图来实现这一点。我想达到同样的结果,但更有效地使用 nbagg
。
%matplotlib inline
import time
import pylab as pl
from IPython import display
for i in range(10):
pl.clf()
pl.plot(pl.randn(100))
display.display(pl.gcf())
display.clear_output(wait=True)
time.sleep(1.0)