【问题标题】:using show() and close() from matplotlib使用 matplotlib 中的 show() 和 close()
【发布时间】:2012-07-13 19:27:19
【问题描述】:

我在使用 matplotlib 时遇到了一些问题....我无法同时打开 2 个窗口来使用 show() 显示图像,似乎脚本在我使用 show 的行处停止并且不会继续,除非我手动关闭显示器。有没有办法关闭脚本中的图形窗口?

以下代码没有按我的意愿运行:

import matplotlib.pyplot as plt
from time import sleep
from scipy import eye

plt.imshow(eye(3))
plt.show()
sleep(1)
plt.close()
plt.imshow(eye(2))
plt.show()

我预计第一个窗口会在 1 秒后关闭,然后再打开第二个窗口,但是直到我自己关闭窗口才会关闭。是我做错了什么,还是它应该是这样?

【问题讨论】:

  • 可能重复。检查stackoverflow.com/q/9753885/302369
  • 确实解决了这个问题,但我得到了另一个.....当我使用 plt.ion() 我不能使用一些资源,比如放大图形窗口(我什至不能移动窗口)...

标签: python matplotlib show


【解决方案1】:

plt.show() 是一个阻塞函数。

本质上,如果要同时打开两个窗口,则需要创建两个图形,然后在最后使用 plt.show() 显示它们。事实上,一般的经验法则是你设置你的情节,而 plt.show() 是你做的最后一件事。

所以在你的情况下:

fig1 = plt.figure(figsize=plt.figaspect(0.75))
ax1 = fig1.add_subplot(1, 1, 1)
im1, = plt.imshow(eye(3))

fig2 = plt.figure(figsize=plt.figaspect(0.75))
ax2 = fig2.add_subplot(1, 1, 1)
im2, = plt.imshow(eye(2))

plt.show()

您可以使用axes(ax2) 在绘图之间切换。

我整理了一个综合示例,说明为什么 plot 函数会阻塞以及如何在回答另一个问题时使用它:https://stackoverflow.com/a/11141305/1427975

【讨论】:

  • 谢谢,先生。但在我的脚本中,我试图一个一个地展示 100 个情节。我最终可能不会选择 plt.show() 它们。我想显示一个情节,暂停可能 1 秒钟,然后在脚本中自动关闭它而不是手动关闭它,然后重复显示下一个情节,持续 100 次。有没有办法做到这一点?编辑:我在一切之上尝试了 plt.ion() 。是的,情节出现并被一一关闭。然而,图形窗口上什么也没有出现,全是白色的。
【解决方案2】:

我使用 PyScripter 和 Python 2.7,并且还遇到了 plt.show() 阻止所有执行的问题,直到您手动关闭数字。

我发现将 Python 引擎更改为“远程 (Wx)”可以让脚本在 plt.show() 之后运行 - 因此可以使用 plt.close() 关闭数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-03
    • 2013-12-22
    • 1970-01-01
    • 2015-09-18
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    相关资源
    最近更新 更多