2012-07-13 298 views
7

我遇到了matplotlib的一些问题....我无法一次打开2个窗口显示图像与show(),似乎脚本停在我使用show的行,除非手动关闭显示,否则不会继续。有没有办法在脚本内关闭数字窗口?使用显示()和关闭()从matplotlib

下面的代码不能运行,因为我想:

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

+0

可能的重复。检查http://stackoverflow.com/q/9753885/302369 – imsc 2012-07-13 22:21:10

+0

确实解决了这个问题,但我得到另一个.....当我使用plt.ion()我不能使用一些资源,如放大数字窗户(我甚至不能移动窗户)... – xarles 2012-07-14 04:07:52

回答

11

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)情节之间切换。

我整理了一个综合示例,演示为什么剧情功能被阻止,以及如何将它用于另一个问题的答案:https://stackoverflow.com/a/11141305/1427975

+0

谢谢,先生。但在我的剧本中,我试图一个接一个地演示100个剧情。我可能不会选择plt.show()他们到底。我想显示一个情节,暂停1秒钟,然后在脚本中自动关闭它,而不是手动关闭它,然后重复显示下一个100次。是否有无论如何这样做? 编辑:我试了一下plt.ion()。是的,情节出现并逐一关闭。然而,数字窗口上没有任何东西出现,全是白色的。 – StayFoolish 2017-05-14 13:49:33

1

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

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