我正在编写一个带有散布图和计算的 python 脚本。我对 matplotlib 的行为,尤其是plt.pause. 考虑以下片段:
import matplotlib.pyplot as plt
import time
fig,ax=plt.subplots()
ax.plot([1,2])
fig.show()
time.sleep(5) #This is a substitute for real computations
-> 五秒钟内没有任何反应
import matplotlib.pyplot as plt
import time
fig,ax=plt.subplots()
ax.plot([1,2])
plt.pause(0.1)
fig.show()
time.sleep(5) #This is a substitute for real computations
-> 窗口显示所需的绘图五秒钟
似乎plt.pause需要看到任何东西。那么为什么文档会说“这个功能是实验性的;它的行为可能会在未来的版本中改变或扩展。” 为什么我没有plt.pause在任何教程中看到?
另外,为什么如此重要的功能会被设计得如此奇怪,以至于用户必须输入足够小的时间,而不是零?我知道有些人实际上想暂停执行,但我没有,我只是想看看情节。这有那么不寻常吗?
顺便说一句,我注意到我也可以这样做plt.show(),由于我不知道的原因,它的行为不同于plt.gcf().show()[= fig.show] 并阻止执行,直到用户关闭窗口。虽然这确实在我想要的时候显示了情节,但我不希望停止执行,我希望用户在后续计算期间继续看到情节。使用plt.show(block=False)DOES 似乎表现得像plt.gcf().show()[= fig.show()],所以它也是没用的。
此外,我在某个地方读到了plt.ion应该有帮助的地方,但没有。在上面的片段中添加plt.ion()beforefig,ax=plt.subplots()不会改变任何东西。
最后,我听说不同的后端可能会有不同的行为。我在 Ubuntu 18 上使用 python 3.6 (anaconda) 和 matplotlib 2.2.2。如果我import matplotlib; matplotlib.use('Qt5Agg')在片段的开头添加,没有太大的变化,而是第一个片段在五秒钟内没有显示任何内容,而是在五秒钟内显示一个垃圾窗口(窗口显示屏幕上弹出的位置显示的任何内容) .