相关疑难解决方法(0)

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

环境:Python 2.7,matplotlib 1.3,IPython笔记本1.1,linux,chrome.代码在一个输入单元格中,使用--pylab=inline

我想使用IPython笔记本和pandas来消耗流并每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)
Run Code Online (Sandbox Code Playgroud)

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

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

python matplotlib ipython pandas ipython-notebook

77
推荐指数
4
解决办法
6万
查看次数

为什么Jupyter Notebook在制作更新图时会创建重复的图

我正试图在Jupyter笔记本中制作每秒钟更新一次的情节.现在,我只有一个简单的代码正在工作:

%matplotlib inline
import time
import pylab as plt
import numpy as np
from IPython import display

for i in range(10):
    plt.close()
    a = np.random.randint(100,size=100)
    b = np.random.randint(100,size=100)

    fig, ax = plt.subplots(2,1)
    ax[0].plot(a)
    ax[0].set_title('A')
    ax[1].plot(b)
    ax[1].set_title('B')

    display.clear_output(wait=True)
    display.display(plt.gcf())
    time.sleep(1.0)
Run Code Online (Sandbox Code Playgroud)

这更新了我每秒创建的图表.但是,最后,还有一个额外的图表副本:

在此输入图像描述

它为什么这样做?我怎么能让这件事发生呢?先感谢您.

python matplotlib ipython jupyter-notebook

6
推荐指数
2
解决办法
1282
查看次数

如何使用 JupyterLab 循环更新交互式图形

我正在尝试使用 JupyterLab 在循环中更新交互式 matplotlib 图形。如果我在与循环不同的单元格中创建图形,我就可以执行此操作,但我更愿意创建图形并在同一单元格中运行循环。

简单代码示例:

import matplotlib.pyplot as plt
import time

%matplotlib widget

fig = plt.figure()

for i in range(5):
    x = list(range(i+2))
    xx = [x**2 for x in x]
    plt.clf()
    plt.plot(x, xx)
    fig.canvas.draw()
    
    time.sleep(1)
Run Code Online (Sandbox Code Playgroud)

如果fig = plt.figure()与循环位于同一单元格中,则在循环完成之前不会更新图形:

不动态更新

如果我在不同的单元格中创建图形,我会得到动态更新,但如果可能的话,我希望能够在同一单元格中创建图形,以便输出位于循环下方:

需要额外的细胞

我在其他问题中尝试了几个答案(此处此处此处),但是它们似乎不适用于 JupyterLab 中的交互式图形。我使用jupyter/scipy-notebook docker 镜像作为我的环境,所以我相信一切都设置正确。

有什么方法可以在创建图形的同一单元格中获得动态更新吗?

python matplotlib jupyter jupyter-lab

3
推荐指数
1
解决办法
3294
查看次数