Введение
Этот пошаговый практикум демонстрирует, как создавать анимацию с несколькими подграфиками с использованием Matplotlib в Python. В примере показано, как анимировать круг и синусоидальную кривую на двух разных подграфиках.
Советы по работе с ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Ноутбук и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импорт библиотек
Первым шагом является импорт необходимых библиотек, в том числе Matplotlib, NumPy и модуля анимации Matplotlib.
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.animation as animation
from matplotlib.patches import ConnectionPatch
Создание фигуры и подграфиков
Вторым шагом является создание фигуры и подграфиков, которые будут использоваться для анимации. В этом примере мы создаем два подграфика рядом с разными соотношениями сторон. Левый подграфик представляет собой единичный круг, а правый подграфик - пустой график, который будет использоваться для анимации синусоидальной кривой.
fig, (axl, axr) = plt.subplots(
ncols=2,
sharey=True,
figsize=(6, 2),
gridspec_kw=dict(width_ratios=[1, 3], wspace=0),
)
axl.set_aspect(1)
axr.set_box_aspect(1 / 3)
axr.yaxis.set_visible(False)
axr.xaxis.set_ticks([0, np.pi, 2 * np.pi], ["0", r"$\pi$", r"$2\pi$"])
Нарисовать круг и начальную точку
Третий шаг - нарисовать круг и начальную точку на левом подграфике. Мы создаем массив углов для генерации круга, а затем рисуем синус и косинус каждого угла. Также мы рисуем одну точку в начале координат.
x = np.linspace(0, 2 * np.pi, 50)
axl.plot(np.cos(x), np.sin(x), "k", lw=0.3)
point, = axl.plot(0, 0, "o")
Нарисовать синусоидальную кривую
Четвертый шаг - нарисовать синусоидальную кривую на правом подграфике. Мы создаем массив углов, а затем рисуем синус каждого угла. Также мы сохраняем объект графика sine, который мы будем обновлять позже при создании анимации.
sine, = axr.plot(x, np.sin(x))
Нарисовать соединяющую линию
Пятый шаг - нарисовать пунктирную линию, соединяющую два подграфика. Мы создаем объект ConnectionPatch, который соединяет начало координат левого подграфика с правым краем правого подграфика. Также мы сохраняем объект con (от англ. connection - соединение), который мы будем обновлять позже при создании анимации.
con = ConnectionPatch(
(1, 0),
(0, 0),
"data",
"data",
axesA=axl,
axesB=axr,
color="C0",
ls="dotted",
)
fig.add_artist(con)
Определить функцию для анимации
Шестой шаг - определить функцию для анимации. Эта функция будет вызываться для каждого кадра анимации и будет обновлять позицию точки на левом подграфике, позицию и данные синусоидальной кривой на правом подграфике, а также позицию соединяющего участка.
def animate(i):
x = np.linspace(0, i, int(i * 25 / np.pi))
sine.set_data(x, np.sin(x))
x, y = np.cos(i), np.sin(i)
point.set_data([x], [y])
con.xy1 = x, y
con.xy2 = i, y
return point, sine, con
Создать анимацию
Седьмой шаг - создать объект анимации с использованием функции FuncAnimation. Мы передаем в нее объект фигуры, функцию для анимации, интервал между кадрами в миллисекундах, количество кадров и задержку перед повторением анимации.
ani = animation.FuncAnimation(
fig,
animate,
interval=50,
blit=False, ## blitting can't be used with Figure artists
frames=x,
repeat_delay=100,
)
Показать анимацию
Последний шаг - показать анимацию с использованием функции show из модуля pyplot.
plt.show()
Резюме
Этот пошаговый практикум показал, как создать анимацию с несколькими подграфиками с использованием Matplotlib в Python. Пример демонстрирует, как анимировать круг и синусоидальную кривую на двух разных подграфиках. Шаги включают в себя импорт библиотек, создание фигуры и подграфиков, рисование круга и начальной точки, рисование синусоидальной кривой, рисование соединяющей линии, определение функции для анимации, создание объекта анимации и показ анимации.