【问题标题】:Keep plotting window open in Matplotlib在 Matplotlib 中保持绘图窗口打开
【发布时间】:2012-09-03 17:03:19
【问题描述】:

在编写使用 matplotlib 的脚本时,我在运行脚本时会暂时获得一个交互式图形窗口,在我查看绘图之前它会立即消失。如果我在 iPython 中以交互方式执行相同的代码,图形窗口将保持打开状态。当我运行脚本时,如何让 matplotlib 保持绘图打开?

例如,我可以保存这个情节,但我不能用show()显示它:

from matplotlib import pyplot as plt
import scipy as sp

x =  sp.arange(10)
y =  sp.arange(10)

plt.plot(x,y)
plt.show()

【问题讨论】:

  • 当我运行包含 matplotlib 的 show() 方法的脚本时,窗口会一直打开直到我关闭它,并且脚本在我关闭窗口之前不会返回。你能提供一个最小的例子来说明你的问题吗?
  • 你确定你做的不仅仅是展示你的情节吗?如果这是你做的最后一件事,那么 Python 只会退出你的脚本!将有关它的信息添加到您的问题中。
  • 我可以很好地保存地块。无论出于何种原因,我都无法显示它们。我短暂地得到一个窗口,他们立即消失了。更新了示例。
  • 我正在使用 OS X Mountain Lion。

标签: python matplotlib


【解决方案1】:

根据documentation,有一个实验性的block 参数可以传递给plt.show()。当然,如果你的 matplotlib 版本不够新,它不会有这个。

如果您有此功能,您应该可以将plt.show() 替换为plt.show(block=True) 以获得您想要的行为。

【讨论】:

  • 我仍然不明白在什么情况下您需要将其设置为True。正如我所说,当我使用系统的 Python 解释器调用 Python 脚本时(例如 $ python plot_a_plot.py 和包含 plot_a_plot.pypylab.show()),这个 Python 进程在我关闭所有绘图窗口之前不会返回。这与文档一致:“在非交互模式下,显示所有图形并阻塞,直到图形关闭”
  • @jan-philip-gehrcke 我得到与“乌龟”相同的行为。我正在使用 Debian 7.0、Python 2.7.3 和 matplotlib 1.1.1rc2
  • @glarrain 是的,这里也一样。我想我是这里唯一的 windows/py3.3 人,但我的绘图窗口只有在我使用 block=True 时才有效
  • @Navin 很高兴知道这个包在最新的 Python 版本 (3.3) 中是如何工作的,尽管我担心在使用 C/C++ 库的 Python 软件方面 Windows 不是很有代表性。
  • @Jan-PhilipGehrcke 至少在我的情况下,fig.show() 是非阻塞的,而 plt.show() 是正常阻塞的。
【解决方案2】:

老问题,但更规范的答案(也许),因为它只使用文档而不是实验功能。

在您的脚本退出之前,进入非交互模式并显示您的数字。这可以使用plt.show()plt.gcf().show() 来完成。两者都会阻塞:

plt.ioff()
plt.show()

plt.ioff()
plt.gcf().show()

在这两种情况下,show 函数在图窗关闭之前不会返回。第一种情况是阻塞所有图形,第二种情况是阻塞直到一个图形关闭。

您甚至可以使用matplotlib.rc_context 上下文管理器临时修改程序中间的交互状态,而无需更改任何其他内容:

import matplotlib as mpl
with mpl.rc_context(rc={'interactive': False}):
    plt.show()

with mpl.rc_context(rc={'interactive': False}):
    plt.gcf().show()

【讨论】:

  • 谢谢你,超级有用。我在 Vim 中编辑,这样,我可以映射一个键盘快捷键来执行当前文件并弹出图形窗口。允许我避免使用 IPython 会话。
猜你喜欢
  • 1970-01-01
  • 2014-11-08
  • 2013-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 2020-10-27
相关资源
最近更新 更多