使用matplotlib中的show()和close()函数

2024-10-03 04:38:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我在matplotlib上遇到了一些问题。。。。我无法同时打开两个窗口来使用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秒后关闭,然后打开第二个窗口,但直到我自己关闭它,窗口才关闭。我是做错了什么,还是应该这样?


Tags: from图像import脚本matplotlibshowplt数字
3条回答

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

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

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

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

相关问题 更多 >