在Mac OS X上使用键盘关闭pyplot图形
有没有办法在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 个回答
当你在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')
来关闭所有窗口,恢复你的桌面。
使用交互模式:
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()
来关闭交互模式
我通过把
plt.show()
替换成
plt.show(block=False)
input("Hit Enter To Close")
plt.close()
来解决这个问题。这算是一种小技巧,希望能对某些人有帮助。
这绝对是pyplot使用的默认OS X后端中的一个错误。如果你在文件的顶部添加以下两行代码,就可以切换到一个对我有效的不同后端,希望这对其他人也有帮助。
import matplotlib
matplotlib.use('TKAgg')