Python Matplotlib'的精确语义;s";互动模式;(ion(),ioff())?

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

Matplotlib的pyplot中的“交互模式”文档如下:

pyplot界面的交互属性控制是否在每个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()
将显示图形,同时等待用户键入enter(这将方便地关闭所有图形):

因此,
ion()
似乎不仅仅是在每个绘图命令之后添加自动图形更新,不幸的是,我在文档中找不到任何内容。后一个程序的另一个更重要的问题是,
ion()
使所有绘图命令更新图形,这在单个图形多次更新时非常耗时

那么,有没有办法:

  • 让终端等待输入,然后自动关闭所有图形
  • 具有交互式Matplotlib图
  • …在开始时不强制打开交互模式(以便不强制自动更新图形,这可能会很耗时)

我建议您按照“Thomas K”的最后一条评论进行操作。我记得邮件列表上有一个类似的问题,但我在搜索了几分钟后就找不到了。对不起

我也有这个问题,对我来说更好的方法是使用
ipython--pylab
。我安装了一个旧得多的matplotlib版本,它在
ion()
方面存在一些问题。除此之外,matplotlib在Windows上的
draw()
也有一些问题。也许它是在上一个版本中修复的

p、 s:很抱歉,我帮不了你

致以最诚挚的问候。

以下是Matplotlib邮件列表中有关此主题的邮件摘要。执行摘要如下:

  • 交互模式(通过
    ion()
    激活)使许多事情自动化。特别是,
    pyplot.*
    命令会自动更新屏幕上的相关轴。但是,对Matplotlib对象(如
    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