环境:Python 2.7,matplotlib 1.3,IPython Notebook 1.1,Linux,Chrome。该代码位于一个输入单元格中,使用--pylab=inline
--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()
我什至尝试在每个plot()等之后显式添加draw()函数。它们都不起作用。想知道如何在IPython Notebook中的一个单元格中通过for / while循环动态更新绘图。
使用IPython.display模块:
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)