Создание анимированных подграфиков Matplotlib

Beginner

This tutorial is from open-source community. Access the source code

Введение

Этот пошаговый практикум демонстрирует, как создавать анимацию с несколькими подграфиками с использованием 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. Пример демонстрирует, как анимировать круг и синусоидальную кривую на двух разных подграфиках. Шаги включают в себя импорт библиотек, создание фигуры и подграфиков, рисование круга и начальной точки, рисование синусоидальной кривой, рисование соединяющей линии, определение функции для анимации, создание объекта анимации и показ анимации.