11

我在使用 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 秒后关闭,然后再打开第二个窗口,但是直到我自己关闭窗口才会关闭。我做错了什么,还是它应该是这样?

4

2 回答 2

12

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 。

于 2012-07-14T16:24:47.140 回答
2

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

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

于 2016-02-12T13:29:29.703 回答