在Mac OS X上使用键盘关闭pyplot图形

16 投票
4 回答
5972 浏览
提问于 2025-04-18 10:48

有没有办法在OS X上用键盘关闭pyplot图形窗口?我发现只能通过点击窗口的关闭按钮来关闭它。

我尝试了很多组合键,比如command-Q、command-W等,但在我的系统上都没有效果。

我还试过在这里发布的这段代码:

#!/usr/bin/env python

import matplotlib.pyplot as plt

plt.plot(range(10))

def quit_figure(event):
    if event.key == 'q':
        plt.close(event.canvas.figure)

cid = plt.gcf().canvas.mpl_connect('key_press_event', quit_figure)

plt.show()

不过,上面的代码在OS X上也不管用。我尝试在quit_figure里加打印语句,但好像这个函数根本没有被调用。

我是在最新的公共版OS X上测试的,使用的是matplotlib 1.1.1版本,还有OS X自带的标准Python(2.7.3)。有没有什么办法解决这个问题?每次都要用鼠标真让人烦。

4 个回答

-2

当你在matplotlib窗口里时,官方的快捷键是ctrl-W,具体可以参考这里:

http://matplotlib.org/1.2.1/users/navigation_toolbar.html

不过,这个操作在Mac上不太一样,应该用cmd-W。这个可能不太好猜吧?

如果你在使用交互式命令行,也可以通过代码来关闭窗口。可以看看这个链接:

在matplotlib中,什么时候使用cla()、clf()或close()来清除图形?

所以,如果你使用pylab或者类似的工具(所有东西都在同一个命名空间里),只需要用 close(fig) 就可以了。如果你是手动加载库,那就需要从正确的命名空间中取 close,比如:

import matplotlib.pyplot as plt

fig = plt.figure()
plt.plot([0,1,2],[0,1,0],'r')
fig.show()
plt.close(fig)

这里唯一要注意的是,虽然大家可能会期待有 fig.close 这个东西,但实际上并没有。不过,你可以用 plt.close('all') 来关闭所有窗口,恢复你的桌面。

0

使用交互模式

import matplotlib.pyplot as plt
# Enable interactive mode:
plt.ion()

# Make your plot: No need to call plt.show() in interactive mode
plt.plot(range(10))

# Close the active plot:
plt.close()
# Plots can also be closed via plt.close('all') to close all open plots or
# plt.close(figure_name) for named figures.

可以查看这个文档中的“什么是交互模式?”部分

你可以随时通过 plt.ioff() 来关闭交互模式

13

我通过把

plt.show()

替换成

plt.show(block=False)
input("Hit Enter To Close")
plt.close()

来解决这个问题。这算是一种小技巧,希望能对某些人有帮助。

16

这绝对是pyplot使用的默认OS X后端中的一个错误。如果你在文件的顶部添加以下两行代码,就可以切换到一个对我有效的不同后端,希望这对其他人也有帮助。

import matplotlib
matplotlib.use('TKAgg')

撰写回答