我正在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)
它每一秒都在更新我创建的情节。然而,在最后,有一个额外的情节副本:
它为什么要这样做?我怎么能让这种情况不发生呢?提前谢谢你。
3条答案
按热度按时间ioekq8ef1#
设置
inline
后端,以便在每个单元完成执行时,将显示在该单元中创建的任何matplotlib图。您使用
display
函数显示了一次图形,然后内联后端会自动再次显示该图形。防止这种情况发生的最简单方法是在单元格中的代码末尾添加
plt.close()
。von4xj4u2#
另一种方法是在行尾添加
;
!我在使用statsmodels
方法绘制时间序列(statsmodels.graphics.tsaplot.plot_acf()
)的自相关图时遇到了同样的问题:flseospp3#
尽管使用了
%matplotlib inline
,但它对某些库不起作用,比如statsmodels
。我建议总是在代码末尾使用plt.show()
。