Подтвердить что ты не робот

Закрыть фигуру 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). Есть какие нибудь идеи как это починить? Это очень раздражает, когда приходится каждый раз обращаться к мыши.

4b9b3361

Ответ 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'), чтобы восстановить свой рабочий стол.