Анимация в ноутбуке iPython
Я пытаюсь поместить анимации в ноутбук iPython и не нахожу решения. Я видел один пост, который обсуждался с использованием интерактивных виджетов, но есть пара проблем, которые у меня есть: во-первых, каждый пример, который я вижу с виджетами, использует слайдер или какой-то другой ввод, тогда как я просто хочу, чтобы анимация запускалась автоматически при запуске ячейки. Во-вторых, вся документация кажется устаревшей на сайте Jupyter-всякий раз, когда я загружаю и запускаю свои ноутбуки, я получаю эти сообщения о том, что некоторые модули устарели, а затем в файле что-то не запускается, предположительно потому, что они пытаются импортировать и получить доступ к файлам, которые больше не существуют.
Я видел несколько других страниц по этой теме, но они часто требуют загрузки двоичных файлов или других модулей, но я частично использую это, чтобы научить некоторых студентов математике, и я заставил их загрузить Anaconda-я надеялся не запутать проблему, заставив их также загружать и устанавливать более сложные все это время я не говорил о математике.
короче говоря, есть ли способ, которым я могу создавать анимации в ноутбуке iPython, которые требуют только использования простых команд импорта, которые будут работать из коробки, так сказать, с программным обеспечением, которое поставляется из Anaconda?
[Edit: я также должен отметить, что я использовал Tkinter для создания анимации, и я могу сделать это в matplotlib, я уверен. Поэтому, если бы был способ получить анимации, которые вы производите с теми, чтобы рендеринг в ноутбуке iPython, это, безусловно, было бы рабочим решением для меня.]
[дальнейшее редактирование: я полагаю, что могу также сказать, что я надеюсь оживить в данный момент, хотя я действительно хочу быть довольно гибким в отношении диапазона вещей, которые я мог бы оживить, если решу. Прямо сейчас я пытаюсь сделать цифровые часы, которые отображают каждую цифру в шумерской базе-60 цифр, чтобы проиллюстрировать другую систему счета и базы. Поэтому он должен сначала отображаться | затем через секунду || и так далее до тех пор, пока десять не будет представлено как
4 ответов
некоторые опции для анимации сюжетов в Jupyter / IPython, используя matplotlib:
-
используя
display
в цикле использоватьIPython.display.display(fig)
для отображения фигуры на выходе. Используя цикл, вы хотите очистить вывод перед отображением новой фигуры. Обратите внимание, что этот метод дает в целом не так гладко resluts. Поэтому я бы посоветовал использовать любое из приведенных ниже.import matplotlib.pyplot as plt import matplotlib.animation import numpy as np from IPython.display import display, clear_output t = np.linspace(0,2*np.pi) x = np.sin(t) fig, ax = plt.subplots() l, = ax.plot([0,2*np.pi],[-1,1]) animate = lambda i: l.set_data(t[:i], x[:i]) for i in range(len(x)): animate(i) clear_output(wait=True) display(fig) plt.show()
-
%matplotlib notebook
использовать Оболочкой IPython магии%matplotlib notebook
чтобы установить бэкэнд на бэкэнд ноутбука. Это сохранит фигуру живой вместо отображения статического файла png и, следовательно, также может показывать анимацию.
Пример:%matplotlib notebook import matplotlib.pyplot as plt import matplotlib.animation import numpy as np t = np.linspace(0,2*np.pi) x = np.sin(t) fig, ax = plt.subplots() l, = ax.plot([0,2*np.pi],[-1,1]) animate = lambda i: l.set_data(t[:i], x[:i]) ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t)) plt.show()
-
%matplotlib tk
использовать IPython magic%matplotlib tk
для установки бэкэнда на бэкэнд tk. Это откроет фигуру в новом окне построения графика, которое является интерактивным и, таким образом, может также показывать анимацию.
Полный пример:%matplotlib tk import matplotlib.pyplot as plt import matplotlib.animation import numpy as np t = np.linspace(0,2*np.pi) x = np.sin(t) fig, ax = plt.subplots() l, = ax.plot([0,2*np.pi],[-1,1]) animate = lambda i: l.set_data(t[:i], x[:i]) ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t)) plt.show()
-
конвертировать анимацию в mp4 видео (опция уже упомянута @Perfi):
from IPython.display import HTML HTML(ani.to_html5_video())
или использовать
plt.rcParams["animation.html"] = "html5"
в начале ноутбука. Это потребует наличия видеокодеков ffmpeg для преобразования в видео HTML5. Затем видео отображается в строке. Поэтому это совместимо с%matplotlib inline
бэкэнд. Полный пример:%matplotlib inline import matplotlib.pyplot as plt plt.rcParams["animation.html"] = "html5" import matplotlib.animation import numpy as np t = np.linspace(0,2*np.pi) x = np.sin(t) fig, ax = plt.subplots() l, = ax.plot([0,2*np.pi],[-1,1]) animate = lambda i: l.set_data(t[:i], x[:i]) ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t)) ani
%matplotlib inline import matplotlib.pyplot as plt import matplotlib.animation import numpy as np t = np.linspace(0,2*np.pi) x = np.sin(t) fig, ax = plt.subplots() l, = ax.plot([0,2*np.pi],[-1,1]) animate = lambda i: l.set_data(t[:i], x[:i]) ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t)) from IPython.display import HTML HTML(ani.to_html5_video())
-
конвертировать анимацию в JavaScript:
from IPython.display import HTML HTML(ani.to_jshtml())
или использовать
plt.rcParams["animation.html"] = "jshtml"
в начале ноутбука. Это отобразит анимацию как HTML с JavaScript. Это очень совместимо с большинством новых браузеров, а также с%matplotlib inline
бэкэнд. Он доступен в matplotlib 2.1 или выше.
Пример:%matplotlib inline import matplotlib.pyplot as plt plt.rcParams["animation.html"] = "jshtml" import matplotlib.animation import numpy as np t = np.linspace(0,2*np.pi) x = np.sin(t) fig, ax = plt.subplots() l, = ax.plot([0,2*np.pi],[-1,1]) animate = lambda i: l.set_data(t[:i], x[:i]) ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t)) ani
%matplotlib inline import matplotlib.pyplot as plt import matplotlib.animation import numpy as np t = np.linspace(0,2*np.pi) x = np.sin(t) fig, ax = plt.subplots() l, = ax.plot([0,2*np.pi],[-1,1]) animate = lambda i: l.set_data(t[:i], x[:i]) ani = matplotlib.animation.FuncAnimation(fig, animate, frames=len(t)) from IPython.display import HTML HTML(ani.to_jshtml())
вы можете найти этот учебник интересным.
Если вы можете превратить то, что вам нужно, в анимацию matplotlib, и я уверен из вашего описания, что это возможно, вы можете использовать
from matplotlib import rc, animation
rc('animation', html='html5')
и отображать анимацию с помощью
anim = animation.FuncAnimation(fig, animate, init_func=init,
frames=N, interval=20, blit=True)
anim
может пригодиться!
У меня была похожая проблема, и этот вопрос помог мне начать. Я собрал блокнот, который иллюстрирует использование FuncAnimation вместе с хорошими объяснениями того, почему Блокнот делает некоторые вещи так, как он делает. Он также имеет ссылки на инструкции по FFmpeg. Он также имеет ссылки на примеры, которые я использовал при разработке и понимании анимации. Вы можете просмотреть мой вклад в: Анимация Иллюстрация
для вашего вопроса Вы можете найти интерактивный ползунки-лучший инструмент. Я также создал ноутбук, который демонстрирует интерактивные виджеты в Jupyter. Он доступен здесь; однако интерактивные части там не работают.
оба доступны в GitHub Repostory
виджеты Jupyter-хороший способ отображения анимации. Код ниже отображает анимированный gif.....
from ipywidgets import Image
from IPython import display
animatedGif = "animatedGifs/01-progress.gif" #path relative to your notebook
file = open(animatedGif , "rb")
image = file.read()
progress= Image(
value=image,
format='gif',
width=100,
height=100)
display.display(progress)
Вы можете закрыть эту анимацию через:
progress.close()
N. B. Я нашел несколько хороших анимированных GIF от http://www.downgraf.com/inspiration/25-beautiful-loading-bar-design-examples-gif-animated/.