Matplotlib的pyplot中“交互模式”的文档为:
pyplot界面的交互属性控制是否在每个pyplot命令上绘制图形画布。如果interactive为False,则每个绘图命令都会更新图形状态,但只会在显式调用draw()时绘制。当interactive为True时,则每个pyplot命令都会触发绘制。
这似乎很清楚:当交互模式启用时,可以plot()
进行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?!!
。但是,在以下代码中执行draw()不会执行任何操作:
ion()
(在Windows XP上,Matplotlib 1.0.1)。
在开头添加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
会显示图形,同时等待用户输入enter(方便地关闭所有数字):
ion()
因此,看起来ion()
做更多而不仅仅是在每个绘图命令之后添加自动图形更新,遗憾的是我在文档中找不到任何内容。后一个程序的另一个更重要的问题是{{1}}使所有绘图命令更新图形,这在单个图形被多次更新时非常耗时。
那么,有没有办法:
答案 0 :(得分:15)
以下是Matplotlib邮件列表中有关此主题的interesting discussion摘要。执行摘要是:
交互模式(使用ion()
激活)可以自动执行许多操作。特别是,pyplot.*
命令会在屏幕上自动更新相关轴。但是,对像ax.plot()
(ax
是Axes对象)这样的Matplotlib对象的方法调用通常不会执行自动更新;在这种情况下,pyplot.draw()
会执行必要的更新。)
非交互模式不太方便。 draw()
不通常会更新屏幕上的数字。在当前文档中没有提到draw()
在非交互模式下有些“不活跃”的事实,但希望很快就会包含在那里。
同时,有关交互式和非交互式模式的更多信息可以在Matplotlib的a current branch中找到。 draw()
,show()
和朋友的更好documentation也可以在同一分支中找到。
答案 1 :(得分:4)
我建议您按照'Thomas K'的最后评论。我记得邮件列表上有一个类似的问题,但经过几分钟的搜索后我找不到它。遗憾。
我也有这个问题,对我来说更简单的方法是使用ipython --pylab
。我安装了更旧版本的matplotlib,但ion()
存在一些问题。除此之外,matplotlib在Windows上也存在draw()
的一些问题。也许它已在最新版本中修复。
p.s。:很抱歉我帮不了你。
最好的问候。