21

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

pyplot 接口的交互属性控制是否在每个 pyplot 命令上绘制图形画布。如果 interactive 为 False,则图形状态会在每个绘图命令上更新,但只会在显式调用 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(方便关闭所有图形):

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 图,
  • ... 不强制在开始时打开交互模式(以免强制自动更新图表,这可能很耗时)?
4

2 回答 2

16

这是Matplotlib 邮件列表中关于这个主题的有趣讨论的摘要。执行摘要如下:

  • 交互模式(用 激活ion())自动化了许多事情。特别是,pyplot.*命令会在屏幕上自动更新相关轴。但是,对 Matplotlib 对象(如ax.plot()ax作为 Axes 对象)的方法调用通常不会执行自动更新;在这种情况下,pyplot.draw()执行必要的更新。)

  • 非交互模式不太方便。 draw()通常不会更新屏幕的图形。draw()当前文档中没有提到在非交互模式下有些“不活动”的事实,但希望很快就会包含在内。

同时,可以在Matplotlib的当前分支中找到有关交互和非交互模式的更多信息。更好的文档,draw()show()朋友也可以在同一分支中找到。

于 2011-06-22T20:50:33.183 回答
4

我建议您关注“Thomas K”的最后一条评论。我记得邮件列表上有一个类似的问题,但是搜索了几分钟后找不到。对不起。

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

ps:很抱歉没能帮到你。

此致。

于 2011-05-25T23:43:35.613 回答