Найти тему
Nuances of programming

Анимации с Matplotlib

Оглавление

Источник: Nuances of Programming

Используем библиотеку matplotlib для создания интересной анимации

Изображение имитации дождя выполнено с помощью библиотеки Matplotlib, известной как прародитель пакетов для визуализации данных на python. Matplotlib имитирует капли дождя на поверхности путем анимирования масштаба и непрозрачности 50 точек графика разброса. В этой статье мы рассмотрим анимации в Matplotlib и несколько способов их создания.

Обзор

Matplotlib — это одна из самых известных библиотек Python с двумерной (2D) графикой. Многие начинают путешествие в мир визуализации данных с Matplotlib. С ее помощью можно с легкостью создавать графики, гистограммы, энергетические спектры, столбчатые диаграммы, графики погрешностей, графики разброса и многое другое. Она также интегрируется с такими библиотеками, как Pandas и Seaborn для создания более сложных визуализаций.

Некоторые особенности matplotlib:

  • Она разработана подобно MATLAB, поэтому переключаться между ними довольно просто.
  • Содержит множество расширений для визуализации.
  • Воспроизводит практически все графики (если приложить усилия).
  • Существует более десяти лет, соответственно обладает большой базой пользователей.

Однако в некоторых областях Matplotlib отстает от своих мощных противников.

  • Matplotlib обладает достаточно многословным императивным API.
  • Иногда встречаются слабые по стилю стандартные параметры.
  • Слабая поддержка веб и интерактивных графов.
  • Часто тормозит при наличии большого объема сложных данных.

Освежить знания о базовых функциях поможет шпаргалка по Matplotlib из Datacamp.

-2

Анимации

Базовый класс animation в Matplotlib отвечает за анимацию. Он предоставляет основу, вокруг которой создается функциональность анимации. Для этого есть два основных интерфейса:

FuncAnimation создает анимацию с помощью повторения вызова функции func.

ArtistAnimation: анимация с использованием фиксированного набора объектов Artist.

FuncAnimation является более удобным способом. В документации можно ознакомиться с обоими способами подробнее. В этой статье мы будем использовать только инструмент FuncAnimation.

Требования

  • Установите модули, включая numpy и matplotlib
  • Установите ffmpeg или imagemagick для сохранения анимации в формате mp4 или gif.

Теперь можно перейти к созданию базовой анимации в Jupyter Notebooks. Код доступен в репозитории Github.

Базовая анимация: Движущаяся синусоидальная волна

Создадим базовую анимацию синусоидальной волны, движущейся по экрану, с помощью FuncAnimation. Исходный код для этой анимации взят из Руководства по анимации в Matplotlib. Рассмотрим входные данные, а затем разберем отдельные фрагменты кода.

-3

  • В строках 7–9 создаем фигуру window с одной осью. Затем создаем пустой объект line, единственный из объектов, который будет изменяться в анимации. Объект line будет заполнен данными позже.
  • В строках 11–13 создаем функцию init, осуществляющую анимацию. Функция init инициализирует данные и устанавливает пределы оси.
  • В строках 14–18 определяем функцию, которая принимает количество кадров (i) в качестве параметра и создает синусоидальную волну (или любую другую анимацию), выполняющую движения в зависимости от значения i. Эта функция возвращает кортеж измененных объектов графика, который сообщает фреймворку анимации, какие части графика нужно анимировать.
  • В строке 20 создаем объект animation. Параметр blit гарантирует, что будут перерисованы только измененные части графика.

Это базовый подход к созданию анимации в Matplotlib. При внесении небольших изменений в код можно создать более интересные визуализации. Рассмотрим некоторые из них.

Растущая спираль

Создадим движущуюся спираль, которая будет медленно разматываться, с помощью класса animation в matplotlib. Код схож с кодом графика синусоидальной волны, однако содержит несколько изменений.

-4
-5

-6

График обновления в режиме реального времени

Графики обновления в режиме реального времени пригодятся при построении динамических величин, таких как данные о запасах, данные сенсоров и друге зависящие от времени данные. Создаем базовый граф, который обновляется автоматически при появлении новых данных в системе. Создадим график цен на акции компании за месяц.

-7

Откройте терминал и запустите файл python. Получаем изображенный ниже график, который автоматически обновляется следующим образом:

-8

Интервал составляет 1000 миллисекунд или одну секунду.

Анимация на 3D-графике

Создание 3D-графиков достаточно распространено, однако, что если анимировать угол обзора в этих графиках? Идея заключается в изменении обзора камеры и использовании каждого результирующего изображения для создания анимации. В Python Graph Gallery можно найти раздел, посвященный этой теме.

Создайте папку volcano в одном каталоге с notebook. Все изображения, которые будут использовать в анимации, сохранятся в этой папке.

-9

Этот фрагмент кода создаст несколько файлов PNG в папке Volcano. Теперь используем ImageMagick для создания анимации из этих изображений. Откройте терминал, перейдите к папке Volcano и введите следующую команду:

convert -delay 10 Volcano*.png animated_volcano.gif

-10

Анимации с использованием модуля Celluloid

Celluloid — это модуль в Python, упрощающий процесс создания анимации в matplotlib. Эта библиотека создает фигуру matplotlib и Camera из нее. Затем она использует фигуру и делает снимок с камеры после создания каждого фрейма. Наконец создается анимация из всех захваченных фреймов.

Установка

pip install celluloid

Несколько примеров использования модуля Celluloid.

Minimal

-11

-12

Subplots

-13

-14

Legends

-15

Вывод

С помощью анимации можно подчеркнуть особенности визуализации, которые трудно передать с помощью статических диаграмм. Однако не стоит злоупотреблять использованием визуализаций. Каждую функцию в визуализации данных следует использовать разумно для создания лучшего эффекта.

Читайте также:

Читайте нас в телеграмме и vk

Перевод статьи Parul Pandey: Animations with Matplotlib