【发布时间】:2017-04-14 22:36:53
【问题描述】:
有没有办法一次绘制一组图形而不关闭前一个图形,保持对 UI 的控制,并在最后保持图形打开?也许使用更合适的后端,或者使用 OO 样式而不是下面使用的 pyplot/pylab 样式编写它?
例如我知道我能做到
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 在顶部,我想在生成图 4 时返回图 1。
编辑: 使用 Python 2.7.13、Matplotlib 2.0.0。在 Windows 7 SP1 上使用 Spyder 3.1.3 运行它——我尝试在内置的 IPython 控制台、香草 Python 控制台和脚本中运行它,结果都相同。
理想情况下,我希望能够通过脚本和交互方式运行它,即通过执行脚本或复制粘贴到控制台。
【问题讨论】:
-
你用的是什么版本的python?
-
你想从交互式python会话还是从命令行运行代码?
-
@Astrom Python 2.7.13,Matplotlib 2.0.0(更新了原问题)
-
@ab-user216125 理想情况下,两者都有,但我会为其中任何一个提供解决方案。
标签: python matplotlib plot backend figure