在有关如何在ipython笔记本中(一个单元内)在循环中动态更新绘图的答案中,给出了一个示例,说明了如何在Python循环内在Jupyter笔记本中动态更新绘图。但是,这可以通过在每次迭代中销毁并重新创建绘图来实现,并且其中一个线程中的注释指出,可以使用新颖的%matplotlib nbagg
魔术来改善这种情况,该魔术提供了嵌入在笔记本中的交互式图形,比静态图片
但是,nbagg
就我所知,这个奇妙的新功能似乎完全没有记载,而且我找不到如何使用它动态更新绘图的示例。因此,我的问题是,如何使用nbagg后端有效地更新Jupyter / 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)
while True:
将for更改为for循环,则当循环结束时,我会得到最后一个绘图的两个静态图像,而不是交互式nbagg图像。知道为什么吗?