有没有办法在不关闭上一个数字的情况下一次绘制一组数字,保持对UI的控制,并在最后保持数字打开?也许使用更合适的后端,或使用OO样式而不是下面使用的pyplot / pylab样式编写它?
e.g。我知道我可以做到
plt.ioff()
for i in range(10)
plt.figure()
arr = thisFunctionTakesTenSecondsToGenerateMyArray()
plt.plot(arr)
plt.show()
等待我在每次迭代时关闭数字
我也可以
plt.ion()
for i in range(10)
plt.figure()
arr = thisFunctionTakesTenSecondsToGenerateMyArray()
plt.plot(arr)
它会尽可能快地绘制它们(例如10秒),但会阻挡我的整个UI(例如我甚至无法移动窗户),也不会显示轴(我只看到图窗口),并且还会自动关闭循环结束时的所有数字。
我不想要的第三个选项是
plt.ioff()
for i in range(10)
plt.figure()
arr = thisFunctionTakesTenSecondsToGenerateMyArray()
plt.plot(arr)
plt.show()
需要等待100秒才能在屏幕上看到任何内容。
我正在寻找类似于Matlab的行为
for i = 1:10
figure()
arr = thisFunctionTakesTenSecondsToGenerateMyArray()
plot(arr)
drawnow
每隔10秒绘制一个数字,并允许我移动窗户,例如如果图3在顶部,我想回到图1,而图4正在生成。
编辑: 使用Python 2.7.13,Matplotlib 2.0.0。在Windows 7 SP1上使用Spyder 3.1.3运行它 - 我尝试在内置的IPython控制台,vanilla Python控制台和脚本中运行它,所有这些都具有相同的结果。
理想情况下,我希望能够从脚本和交互方式运行它,即通过执行脚本或复制并粘贴到控制台。
答案 0 :(得分:2)
只需在plt.pause(0.0001)
之后的循环中添加plt.show(block=False)
,在结束时添加最后的plt.show()
,以防您从操作系统命令行执行脚本。