matplotlib 为什么Jupyter Notebook在更新图时创建重复图

55ooxyrt  于 2022-11-15  发布在  其他
关注(0)|答案(3)|浏览(314)

我正在Jupyter Notebook中制作一个每秒更新一次的绘图。现在,我只有一个简单的代码可以工作:

%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)

它每一秒都在更新我创建的情节。然而,在最后,有一个额外的情节副本:

它为什么要这样做?我怎么能让这种情况不发生呢?提前谢谢你。

ioekq8ef

ioekq8ef1#

设置inline后端,以便在每个单元完成执行时,将显示在该单元中创建的任何matplotlib图。
您使用display函数显示了一次图形,然后内联后端会自动再次显示该图形。
防止这种情况发生的最简单方法是在单元格中的代码末尾添加plt.close()

von4xj4u

von4xj4u2#

另一种方法是在行尾添加;!我在使用statsmodels方法绘制时间序列(statsmodels.graphics.tsaplot.plot_acf())的自相关图时遇到了同样的问题:

from statsmodels.graphics.tsaplots import plot_acf

plot_acf(daily_outflow["count"]);

flseospp

flseospp3#

尽管使用了%matplotlib inline,但它对某些库不起作用,比如statsmodels。我建议总是在代码末尾使用plt.show()

相关问题