当前位置: 首页 > 面试题库 >

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

邵子平
2023-03-14
问题内容

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


问题答案:

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


 类似资料:
  • 您可能知道,在正常模式下,当状态更新时,我们使用更新依赖项来获得通知,如下所示: 但在我的例子中,我的状态中有一个数组,我正在尝试在useEffect的循环中更新它,如下所示: 在本例中,每次forEach循环运行时,我都会得到初始val(我知道,因为val不是useffect的依赖项),但如果我将其作为依赖项,它将更新两次。解决这个问题的办法是什么? 编辑:基本上,我的意思是,当我在useffe

  • 我有一个抛物线图,抛物线方程的系数存储在数组中。在(mousemotionlistener)中,抛物线的系数被更改,我想用新的系数实时更新抛物线图。我怎么才能让这一切发生?

  • 我在Android编程领域相对来说是个新手,我遇到了一些麻烦。问题是我在MainActivity中定义了一个gridview,它由几个imageViews组成。这些ImageViews有一个onClicklistener,它用另一个gridView打开另一个活动。当在这个网格中选择一个元素(图像)时,我想更新我的MainActivity中的gridview来采用所选择的元素,但实际上我不知道如何实

  • 如下所示,我有3张表,即:表“Shops Fruits Data”,表(“Months”)和表(“Output”)。 我正在尝试将数据从“Shops Fruits data”表中复制到(“Output”)结构中,该数据基于从表中的月份(“months”)。我已经写了一段代码。然而,使用这段代码,我只能遍历第一行。我不明白,我怎样才能继续到下一排,直到最后一排。其次,我也不能将商店和水果的名称复制到

  • 问题内容: 我正在用Python开发一个应用程序,该应用程序从串行端口收集数据并针对到达时间绘制收集的数据图。数据的到达时间不确定。我希望在收到数据时更新绘图。我搜索了如何执行此操作,发现了两种方法: 清除绘图,然后重新绘制所有点的绘图。 通过在特定间隔后对其进行更改来对图进行动画处理。 我不喜欢第一个程序,因为该程序会运行很长时间(例如一天),并且会收集数据,因此重新绘制绘图会非常缓慢。第二种方