Сегодня мы будем анимировать график прямо внутри Jupyter Notebook. Сперва сделаем плавную отрисовку графика. Переключим режим отображения графиков в notebook:
%matplotlib notebook
Импортируем все, что нужно:
import matplotlib.pyplot as plt from matplotlib import animation import numpy as np
Сгенерируем наши данные:
# время (200 точек) t = np.linspace(0, 2 * np.pi, 200) x = np.sin(t) # синусоида
Создадим пустой график:
fig, ax = plt.subplots() # пределы отображения ax.axis([0, 2 * np.pi, -2, 2]) l, = ax.plot([], [])
Функция animate
будет вызываться при отрисовка каждого кадра, аргумент i
– номер кадра:
def animate(i): # рисуем данные только от 0 до i # на первом кадре будет 0 точек, # а на последнем - все l.set_data(t[:i], x[:i])
Запускаем анимацию:
fps = 30 # карды в сек # frames - число кадров анимации ani = animation.FuncAnimation(fig, animate, frames=len(t), interval=1000.0 / fps)
Если мы хотим анимировать сами данные, например, заставить синусоиду «плясать», то на каждом шаге перегенерируем данные заново, используя переменную i
:
def animate(i): x = np.sin(t - i / len(t) * np.pi * 2) * np.sin(t * 15) l.set_data(t, x)
Можно сохранить в GIF:
ani.save('myAnimation.gif', writer='imagemagick', fps=30)
Сам ноутбук я загрузил на GitHub, но поиграться онлайн с ним не получится, надо скачать себе и запустить локально. Анимированные графики отрисовываются в реальном времени, поэтому требуют достаточно много ресурсов. Пример 3D анимации:
Специально для канала @pyway. Подписывайтесь на мой канал в Телеграм @pyway 👈