Документация для "интерактивного режима" в pyplot Matplotlib гласит:
Интерактивное свойство интерфейса pyplot определяет, будет ли рисовать фигуру на каждой команде pyplot. Если интерактивный False, то состояние фигуры обновляется по каждой команде сюжета, но будет отображаться только на явные вызовы draw(). Когда интерактивный True, то каждая команда pyplot запускает ничью.
Это кажется достаточно ясным: когда интерактивный режим включен, можно сделать plot()
без необходимости делать draw()
. Однако делать draw() в следующем коде ничего не делает:
from matplotlib import pyplot as pp
# Interactive mode is off by default
pp.plot([10, 20, 50])
pp.draw()
raw_input('Press enter...') # No graph displayed?!!
(в Windows XP, Matplotlib 1.0.1).
Добавление ion()
в начале приводит к появлению фигуры, ожидая ввода пользователем ввода (что удобно закрывает все цифры):
from matplotlib import pyplot as pp
ion()
pp.plot([10, 20, 50]) # No draw() is necessary
raw_input('Press enter...') # The graph is interactive *and* the terminal responds to enter
Таким образом, похоже, что ion()
делает больше, чем просто добавление автоматических обновлений графа после каждой команды построения, и, к сожалению, я не могу найти что-либо в документации. Другая, более важная проблема с последней программой заключается в том, что ion()
заставляет все графические команды обновлять график, который занимает много времени, когда один график обновляется несколько раз.
Итак, есть ли способ:
- когда терминал ждет ввода, после чего все цифры автоматически закрываются,
- с интерактивными графиками Matplotlib,
- ... без принудительного включения интерактивного режима в начале (чтобы не форсировать автоматическое обновление графиков, что может занять много времени)?