Рубрики
Без рубрики

Анимация на Python

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

Автор оригинала: Pankaj Kumar.

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

В этой статье мы будем использовать библиотеку целлулоидов, которая делает анимацию в Python Matplotlib очень простой.

Целлулоид – Простая анимация на Python

Для начинающих уроки анимации matplotlib могут оказаться сложными. Целлулоид позволяет легко создавать анимацию с помощью matplotlib.

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

Вы можете установить библиотеку целлулоидов в Python с помощью команды Python pip

pip install celluloid

Шаги по созданию анимации с использованием целлулоида

Шаги по созданию анимации с использованием целлулоида

1. Импортируйте класс камеры из целлулоида

Во-первых, нам нужно импортировать класс Camera из модуля celluloid и создать объект camera, передав объект Matplotlib figure.

from celluloid import Camera
fig = plt.figure()
camera = Camera(fig)

2. Создавайте моментальные снимки во время циклического перебора данных

Циклическое построение данных на фигуре Matplotlib постепенно и создание снимка с помощью метода .snap( ) объекта камеры.

#plotting data using loops and creating snapshot at each iteration
plt.plot(..)
camera.snap()

3. Создайте объект анимации

Использование метода .animate( ) класса camera после создания всех кадров.

#Applying the animate method to create animations
animation = camera.animate()

#Saving the animation
animation.save('my_animation.mp4')

Пример реализации анимации в Python

Теперь давайте четко разберемся в описанных выше шагах, создав анимацию в Python для трассировки синусоидальной функции.

#Importing required libraries
%matplotlib notebook
import matplotlib.pyplot as plt
import numpy as np
from celluloid import Camera
import ffmpeg


#Creating Data
x = np.linspace(0, 10, 100)

#defining a function to return sine of input values.
def fun(i):
    y = np.sin(i)
    return y

x_y = fun(x)

#Creating matplotlib figure and camera object
fig = plt.figure()
plt.xlim(0,10)
plt.ylim(-2,2)
camera = Camera(fig)

#Looping the data and capturing frame at each iteration
for i in x:
    plt.plot(x,x_y , color = 'green' , lw = 0.8)
    f = plt.scatter(i, fun(i) , color = 'red' , s = 200)
    plt.title('tracing a sin function')
    camera.snap()

#Creating the animation from captured frames
animation = camera.animate(interval = 200, repeat = True,
                           repeat_delay = 500)



В приведенном выше коде мы определили функцию fun (), которая принимает числовые значения и возвращает синус этого входного значения.

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

После захвата всех кадров мы применяем метод .animate( ) со следующими входными аргументами:

  • интервал – время между двумя кадрами в миллисекундах.
  • repeat – ( Bool ) укажите, хотим ли мы продолжать повторять анимацию.
  • repeat_delay – если значение repeat равно True, то с помощью этого параметра мы указываем временную задержку для повторения анимации.
#Saving the animation
animation.save('sine_wave.mp4')

Некоторые ограничения использования этой библиотеки:

  • Убедитесь, что границы осей одинаковы для всех участков.
  • Передайте художников в функцию legend , чтобы нарисовать их отдельно, так как легенды будут накапливаться из предыдущих сюжетов.

Вывод

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