В ответах на динамическое обновление графика в цикле в ноутбуке ipython (в одной ячейке) приведен пример использования динамического обновления графика внутри ноутбука Jupyter в цикле Python. Однако это работает путем уничтожения и повторного создания графика на каждой итерации и комментария в одном из заметок о том, что эту ситуацию можно улучшить с помощью магии new-ish %matplotlib nbagg
, которая обеспечивает интерактивную фигуру, встроенную в ноутбук, а не статическое изображение.
Однако эта замечательная новая функция nbagg
, насколько мне известно, полностью недокументирована, и я не могу найти пример того, как ее использовать для динамического обновления сюжета. Таким образом, мой вопрос: как эффективно обновить существующий сюжет в ноутбуке Jupyter/Python, используя бэкэнд nbagg?. Поскольку динамическое обновление графиков в matplotlib является сложной проблемой в целом, простой рабочий пример быть огромной помощью. Указатель на любую документацию по этой теме также будет чрезвычайно полезен.
Чтобы понять, о чем я прошу: что я хочу сделать, это запустить некоторый код моделирования для нескольких итераций, затем нарисуйте график его текущего состояния, затем запустите его еще на несколько итераций, а затем обновите для отображения текущего состояния и т.д. Поэтому идея состоит в том, чтобы нарисовать сюжет, а затем, без какого-либо взаимодействия с пользователем, обновить данные на графике, не разрушая и не воссоздавая все это.
Вот несколько слегка модифицированный код из ответа на связанный вопрос выше, который достигает этого путем повторного рисования всей фигуры каждый раз. Я хочу добиться того же результата, но более эффективно использовать nbagg
.
%matplotlib inline
import time
import pylab as pl
from IPython import display
for i in range(10):
pl.clf()
pl.plot(pl.randn(100))
display.display(pl.gcf())
display.clear_output(wait=True)
time.sleep(1.0)