Закрыть фигуру pyplot с помощью клавиатуры на Mac OS X
Есть ли способ закрыть фигуру pyplot в OS X с помощью клавиатуры (насколько я вижу, вы можете закрыть ее, нажав кнопку закрытия окна)?
Я пробовал много ключевых комбинаций, таких как 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. Я попытался добавить инструкции print к quit_figure, но кажется, что он никогда не вызывался.
Я пробую это на последней публичной ОС X, matplotlib версии 1.1.1 и стандартном Python, который поставляется с OS X (2.7.3). Есть какие нибудь идеи как это починить? Это очень раздражает, когда приходится каждый раз обращаться к мыши.
Ответы
Ответ 1
Это определенно ошибка в базе данных OS X по умолчанию, используемой pyplot. Добавление следующих двух строк вверху файла переключается на другой бэкэнд, который работает для меня, если это помогает кому-то еще.
import matplotlib
matplotlib.use('TKAgg')
Ответ 2
Я обошел это, заменив
plt.show()
с
plt.show(block=False)
input("Hit Enter To Close")
plt.close()
Взлом в лучшем случае, но я надеюсь, что это поможет кому-то
Ответ 3
использовать интерактивный режим:
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()
Ответ 4
Когда у вас есть фокус в окне matplotlib, официальная комбинация клавиш - ctrl-W следующим образом:
http://matplotlib.org/1.2.1/users/navigation_toolbar.html
Поскольку это очень не-Mac способ делать что-то, это на самом деле cmd-W. Не так легко догадаться, не так ли?
Если вы используете интерактивную оболочку, вы также можете программно закрыть окно. См:
Когда использовать cla(), clf() или close() для очистки графика в 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')
, чтобы восстановить свой рабочий стол.