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

时间:2014-06-23 18:11:37

标签: python matplotlib osx-mavericks

有没有办法使用键盘关闭OS X中的pyplot数字(据我所知,你只能通过点击窗口关闭按钮来关闭它?)

我尝试了很多键组合,比如command-Q,command-W和类似的组合,但它们似乎都不适用于我的系统。

我也尝试过发布here的代码:

#!/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也不起作用。我尝试将print语句添加到quit_figure,但似乎从未调用过。

我在最新的公共OS X,matplotlib版本1.1.1以及OS X(2.7.3)附带的标准Python上尝试此操作。有想法该怎么解决这个吗?每次必须伸手去抓鼠标都很烦人。

4 个答案:

答案 0 :(得分:13)

这绝对是pyplot使用的默认OS X后端中的一个错误。在文件顶部添加以下两行会切换到适合我的不同后端,如果这有助于其他任何人。

import matplotlib
matplotlib.use('TKAgg')

答案 1 :(得分:13)

我通过替换

解决了这个问题
plt.show()

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

最好的黑客,但我希望能帮助某人

答案 2 :(得分: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.

签出"什么是交互模式?"此documentation

中的部分

可以随时使用plt.ioff()

关闭互动模式

答案 3 :(得分:-2)

当您在matplotlib窗口中有焦点时,官方键盘快捷键是ctrl-W:

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

由于这是一种非常非Mac的方式,它实际上是cmd-W。不容易猜到,是吗?

如果您使用的是交互式shell,则还可以通过编程方式关闭该窗口。参见:

When to use cla(), clf() or close() for clearing a plot in matplotlib?

因此,如果您使用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')重新获得桌面。