小编典典

如何在Ipython Notebook中的循环中动态更新绘图(在一个单元格内)

python

环境:Python 2.7,matplotlib 1.3,IPython Notebook
1.1,Linux,Chrome。该代码位于一个输入单元格中,使用--pylab=inline

我想使用IPython笔记本和熊猫消耗流并每5秒动态更新一次绘图。

当我仅使用print语句以文本格式打印数据时,它就可以很好地工作:输出单元格仅保留打印数据并添加新行。但是,当我尝试绘制数据(然后循环更新)时,该绘制永远不会显示在输出单元格中。但是,如果我删除了循环,则只需绘制一次即可。它工作正常。

然后我做了一些简单的测试:

i = pd.date_range('2013-1-1',periods=100,freq='s')
while True:
    plot(pd.Series(data=np.random.randn(100), index=i))
    #pd.Series(data=np.random.randn(100), index=i).plot() also tried this one
    time.sleep(5)

在我手动中断该进程(ctrl + m +
i)之前,输出不会显示任何内容。在我中断它之后,该图正确显示为多条重叠线。但是我真正想要的是一个显示并每5秒更新一次的图(或者每当plot()调用函数时就更新一次,就像上面提到的print语句输出一样,效果很好)。仅在单元格完全完成后显示最终图表不是我想要的。

我什至尝试在每个plot()等之后显式添加draw()函数。它们都不起作用。想知道如何在IPython Notebook中的一个单元格中通过for /
while循环动态更新绘图。


阅读 214

收藏
2020-12-20

共1个答案

小编典典

使用IPython.display模块:

%matplotlib inline
import time
import pylab as pl
from IPython import display
for i in range(10):
    pl.plot(pl.randn(100))
    display.clear_output(wait=True)
    display.display(pl.gcf())
    time.sleep(1.0)
2020-12-20