Matplotlib的close()方法不能关闭窗口

6

我注意到当我运行以下代码时:

import pylab as pl
pl.ion()
# Plot something
pl.show()
pl.close()

最后一条语句未完全关闭图表。虽然图表变暗,内容消失了,但是图表仍停留在屏幕上,直到我退出IPython如下所示。 enter image description here 我正在使用最新的稳定版本matplotlib(1.3.1)的Anaconda发行版,在Linux 64位上,并使用ssh -X远程连接。
我正在使用以下的后端:
backend : QT4Agg
backend.qt4 : PySide

你如何创建图表?你使用 pl.show() 吗(这应该会阻止代码执行到 pl.close 直到你手动关闭窗口)。你使用哪个后端? - David Zwicker
谢谢@DavidZwicker,我刚刚更新了帖子。 - Josh
嗯,我在这里无法重现你的问题。你使用的是哪个matplotlib后端?我猜你是在连接到一个Linux服务器的Linux机器上运行吧? - David Zwicker
@DavidZwicker 刚刚更新了原帖。是的,我是从一个 Linux 计算机连接到运行代码的 Linux 服务器上的。 - Josh
嗯,对我来说看起来是一个正常的设置。你尝试过切换到另一个后端,比如TkAgg吗?就像我说的,我无法重现你的问题,但在我看来这似乎是一个错误。 - David Zwicker
请确认一下,您是在一个IPython shell中交互式地使用它吗?如果是这样的话,我认为这看起来像是一个bug。如果您是在脚本中运行它,那么当在脚本中运行时,pyplot中的事件循环可能会出现一些有趣的问题,这并不令人意外。 - tacaswell
2个回答

8

你需要指定你想要关闭哪个窗口。如果你想要关闭所有窗口:

pl.close('all')

此外,还有一种方法可以清除但不关闭图形:

pl.clf()

另外,如下所示来自另一个SO问题
请记住,plt.show()是一个阻塞函数,因此在您使用上面的示例代码时,直到窗口关闭后才执行plt.close(),这使其变得多余。
您可以在代码开头使用plt.ion()使其非阻塞,尽管这会产生其他影响。

0

在绘图后,您还可以使用以下行:

#Your Plotting function
plt.waitforbuttonpress(0) 
plt.close(fig)

plt.waitforbuttonpress(0) 会等待用户输入(按键),然后正确关闭 matplotlib 窗口。非常重要的是要指定要关闭哪个图像。


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