环境:Python 2.7,Matplotlib 1.3,IPython笔记本1.1,Linux和Chrome。代码在一个单独的输入单元格中,使用--pylab=inline
。
我想使用IPython笔记本和Pandas来消费流并动态更新绘图,每五秒更新一次。
当我只使用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)之前,程序不会显示任何输出。当我中断它后,图表正确地显示为多个重叠的线条。但我真正想要的是一个每五秒钟或每次调用plot()
函数(就像我上面提到的print语句输出一样好用)更新并显示的图表。仅在单元格完全完成后显示最终图表不是我想要的。
我甚至尝试在每个plot()
之后显式添加draw()函数等,但都没有奏效。如何在IPython笔记本中的一个for/while循环中动态更新图表?
clear_output(wait=True)
可以解决这个问题。请参考下面 wabu 的回答。 - ahwillia%matplotlib nbagg
更好地进行操作,它提供了一个实时的图形界面让你随意调整。 - tacaswellnbagg
来实现这一点。(在此提醒您,如果您有兴趣回答,请回答它。)https://dev59.com/hVsW5IYBdhLWcg3w4qew - N. Virgo