Python Matplotlib'的精确语义;s";互动模式;(ion(),ioff())?
Matplotlib的pyplot中的“交互模式”文档如下: pyplot界面的交互属性控制是否在每个pyplot命令上绘制图形画布。如果interactive为False,则图形状态将在每个plot命令上更新,但仅在显式调用draw()时绘制。如果interactive为True,则每个pyplot命令都会触发绘制 这似乎很清楚:当交互模式打开时,可以执行Python Matplotlib'的精确语义;s";互动模式;(ion(),ioff())?,python,matplotlib,interactive-mode,Python,Matplotlib,Interactive Mode,Matplotlib的pyplot中的“交互模式”文档如下: pyplot界面的交互属性控制是否在每个pyplot命令上绘制图形画布。如果interactive为False,则图形状态将在每个plot命令上更新,但仅在显式调用draw()时绘制。如果interactive为True,则每个pyplot命令都会触发绘制 这似乎很清楚:当交互模式打开时,可以执行plot(),而无需执行draw()。但是,在以下代码中执行draw()不会执行任何操作: from matplotlib import p
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()
将显示图形,同时等待用户键入enter(这将方便地关闭所有图形):
因此,ion()
似乎不仅仅是在每个绘图命令之后添加自动图形更新,不幸的是,我在文档中找不到任何内容。后一个程序的另一个更重要的问题是,ion()
使所有绘图命令更新图形,这在单个图形多次更新时非常耗时
那么,有没有办法:
- 让终端等待输入,然后自动关闭所有图形
- 具有交互式Matplotlib图
- …在开始时不强制打开交互模式(以便不强制自动更新图形,这可能会很耗时)
ipython--pylab
。我安装了一个旧得多的matplotlib版本,它在ion()
方面存在一些问题。除此之外,matplotlib在Windows上的draw()
也有一些问题。也许它是在上一个版本中修复的
p、 s:很抱歉,我帮不了你
致以最诚挚的问候。以下是Matplotlib邮件列表中有关此主题的邮件摘要。执行摘要如下:
- 交互模式(通过
激活)使许多事情自动化。特别是,ion()
命令会自动更新屏幕上的相关轴。但是,对Matplotlib对象(如pyplot.*
(ax.plot()
)的方法调用通常不会执行自动更新;在这种情况下,ax
执行必要的更新。)pyplot.draw()
- 非交互模式不太方便<代码>绘图()通常不会更新屏幕上的图形。当前文档中没有提到
在非交互模式下有点“不活动”,但希望很快会包括在内draw()
同时,有关交互和非交互模式的更多信息,请参见Matplotlib的。在同一个分支中也可以找到更好的
draw()
,show()
和朋友。我认为你需要调用pp.show()
而不是pp.draw()
那里。@Thomas K:目标是让程序等待用户输入enter,因此show()
被排除在外。据我所知,那么,互动模式是实现这一目标的唯一途径。但我不是专家-你可能想在matplotlib用户邮件列表上提问。我也无法在matplotlib用户邮件列表上找到任何相关答案。我刚刚在那里发布了一条新消息。谢谢你的建议。PS:这是帖子:。一旦我确认了一些要点,我将总结一下我们在那里进行的有趣讨论的结果。你能解释一下如何以新手matplotlib用户理解的方式使用ax吗?ax
在Axis对象中:它本质上是一个带坐标的框(或圆)(因此一个图形可以包含多个轴)。实际上,在图形中创建轴时会返回Axes对象。因此,通常使用以下命令获取轴:fig=pyplot.figure();ax=fig.add_子图(111)
和fig,(ax_散射,ax_日志历史)=pyplot.subplot(1,2)
@EricOLebigot链接到分支无效
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