使用Matplotlib的show()和close()函数

11

我在使用matplotlib时遇到了一些问题... 我无法同时打开两个窗口来显示图像,似乎当我使用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秒后关闭,然后打开第二个窗口,但窗口直到我手动关闭它才会关闭。我是做错了什么,还是应该这样运行?


可能是重复问题。请查看 https://dev59.com/2mkw5IYBdhLWcg3woMBD - imsc
确实,这解决了这个问题,但我又遇到了另一个问题......当我使用plt.ion()时,我无法使用一些资源,例如放大图形窗口(甚至无法移动窗口)。 - xarles
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://dev59.com/uWgu5IYBdhLWcg3ws5BC#11141305


谢谢,先生。但是在我的脚本中,我想要逐个展示大约100个图表。最后我可能不会选择plt.show()来展示它们。我想要展示一个图表,暂停1秒钟,然后在脚本中自动关闭它,而不是手动关闭它,然后重复展示下一个图表,共100次。有没有办法做到这一点? 编辑:我尝试在所有内容的顶部使用plt.ion()。是的,图表一个接一个地显示并关闭。然而,图形窗口上什么也没有显示,全是白色。 - StayFoolish

2

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接