gpt4 book ai didi

python - 如何在 IPython 笔记本中的循环中动态更新绘图(在一个单元格内)

转载 作者:IT老高 更新时间:2023-10-28 21:33:51 27 4
gpt4 key购买 nike

环境:Python 2.7,Matplotlib 1.3、IPython 笔记本 1.1、Linux 和 Chrome。代码位于一个输入单元格中,使用 --pylab=inline

我想使用 IPython notebook 和 Pandas 来消费一个流并每五秒动态更新一个图。

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

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

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 循环动态更新绘图?

最佳答案

使用 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)

关于python - 如何在 IPython 笔记本中的循环中动态更新绘图(在一个单元格内),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21360361/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com