У відповідях на те, як динамічно оновлювати графік у циклі в блокноті ipython (у межах однієї комірки) , наводиться приклад того, як динамічно оновлювати графік усередині блокнота Jupyter у циклі Python. Однак це працює, руйнуючи та відтворюючи сюжет на кожній ітерації, а коментар в одній з ниток зазначає, що цю ситуацію можна покращити, використовуючи %matplotlib nbagg
магію new-ish , яка забезпечує інтерактивну фігуру, вбудовану в блокнот, швидше ніж статичне зображення.
Однак ця чудова нова 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)
while True:
заміню цикл for на, коли цикл закінчується, я отримую два статичних зображення останнього сюжету, а не інтерактивний nbagg. Будь-яка ідея, чому це так?