一次绘制一个图而不关闭旧图(matplotlib)

时间:2017-04-14 22:36:53

标签: python matplotlib plot backend figure

有没有办法在不关闭上一个数字的情况下一次绘制一组数字,保持对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控制台和脚本中运行它,所有这些都具有相同的结果。

理想情况下,我希望能够从脚本和交互方式运行它,即通过执行脚本或复制并粘贴到控制台。

1 个答案:

答案 0 :(得分:2)

只需在plt.pause(0.0001)之后的循环中添加plt.show(block=False),在结束时添加最后的plt.show(),以防您从操作系统命令行执行脚本。