Документация для «интерактивного режима» в 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,
- … без принудительного включения интерактивного режима в начале (чтобы не принудительно обновлять графики, что может занять много времени)?
pp.show()
, а неpp.draw()
там. - person Thomas K   schedule 26.05.2011show()
исключено. - person Eric O Lebigot   schedule 26.05.2011