Matplotlib Pyplot的“交互模式”文档如下:
Pyplot接口的interactive属性控制是否在每个pyplot命令上绘制一个图形画布。 如果interactive为False,则图形状态将在每个plot命令上更新,但只会在draw()显式调用时绘制。 当interactive为True时,每个pyplot命令都会触发一次绘制。
这似乎很清楚:当交互模式打开时,可以执行plot()
而无需执行draw()
。 然而,在下面的代码中执行draw()并没有起到任何作用:
from matplotlib import pyplot as pp
# Interactive mode is off by default
pp.plot([10, 20, 50])
pp.draw()
raw_input('Press enter...') # No graph displayed?!!
(在 Windows XP, Matplotlib 1.0.1 上)
在开头加入ion()
可以使图形出现,同时等待用户按下回车键(这也方便地关闭了所有的图形):
from matplotlib import pyplot as pp
ion()
pp.plot([10, 20, 50]) # No draw() is necessary
raw_input('Press enter...') # The graph is interactive *and* the terminal responds to enter
因此,看起来 ion()
不仅仅是在每个绘图命令后添加自动图形更新,而且做了更多事情,但我不幸的是在文档中找不到任何信息。后面一个更重要的问题是当多次更新单个图表时,ion()
使所有绘图命令都更新图表,这需要很长时间。
那么,有没有一种方法:
- 让终端在按下回车键后等待,然后所有图形都会自动关闭,
- 拥有交互式 Matplotlib 图形,
- ... 而不强制开始时就开启交互模式(以避免强制自动更新图形,这可能需要很长时间)?
pp.show()
而不是pp.draw()
。 - Thomas Kshow()
被排除在外。 - Eric O. Lebigot