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

Сюжет Python: Создание анимированных сюжетов на Python

До сих пор вы, должно быть, видели основные сюжеты matplotlib, но тот же модуль matplotlib можно использовать и для анимированных сюжетов! Давайте посмотрим, как построить то же самое!

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

До сих пор вы , должно быть, видели базовые сюжеты matplotlib , но тот же модуль matplotlib можно использовать и для анимированных сюжетов ! Давайте посмотрим, как построить то же самое!

Импорт необходимых модулей

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import random
from itertools import count
from IPython import display

В таблице ниже показаны каждый модуль и их требования:

Имя модуля Требование
Модуль Numpy Используется для создания набора данных для построения графика.
Модуль Matplotlib Для построения графиков требуется
Модуль Matplotlib Чтобы обеспечить функциональные возможности для анимированных сюжетов
случайный Чтобы изначально генерировать случайные точки для случайных интервалов
модуль подсчета Чтобы сгенерировать серию последовательных чисел
модуль отображения Для отображения видео анимированных сюжетов

Создание набора данных для анимированных сюжетов в Python

Для создания набора данных мы создаем два списка , а именно x и y , где x хранит координаты x, а y хранит координаты y.

Теперь координаты x-это последовательные числа. Мы будем использовать звуковой модуль, который выполняет подсчет чисел, начиная с 0 после создания итератора подсчета с помощью функции count . Также для доступа к следующему номеру мы используем функцию next .

Для координат y мы будем использовать модуль random , чтобы выбрать любое случайное целое число между двумя целыми числами. Приведенный ниже код реализует то же самое, что включает в себя функцию animate , которая выполняет увеличение значений:

x=[]
y=[]
i = count()
def animate(j):
    x.append(next(i))
    y.append(random.randint(0, 10))
    plt.plot(x,y)

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

Следующий шаг включает в себя создание объекта с именем animation_1 . Для реализации функции animate при повторении через определенные промежутки времени мы используем функцию FuncAnimation , которая принимает несколько параметров, упомянутых ниже:

  1. plt.gcf(): Принять функцию, указанную в качестве следующего параметра, в качестве “текущей функции”.
  2. Имя функции: В данном случае это animate .
  3. интервал: Установите время, по истечении которого функция будет повторена.
animation_1 = animation.FuncAnimation(plt.gcf(),animate,interval=1000)
plt.show()

Если вы используете python IDLE , график будет автоматически сгенерирован. Но, если вы используете jupyter notebook , даже после использования функции plt.show() после кода, ничего не будет напечатано в качестве вывода. Чтобы избежать этого, необходимо преобразовать видео, сформированное в HTML-форме, которая упоминается в следующем разделе.

Преобразование анимированного сюжета в HTML-видео (для пользователей ноутбуков Jupyter)

Сначала нам нужно преобразовать созданную анимацию в видео html5, которое выполняется в строке номер 1 в коде, показанном ниже. Номер строки 2 создает HTML – код для отображения видео html5. Наконец номер строки 3 отображает html-код, сгенерированный нами для отображения видео.

video_1 = animation_1.to_html5_video()
html_code_1 = display.HTML(video_1)
display.display(html_code_1)
plt.tight_layout()
plt.show()

Позже в номере строки 4 и 5 мы можем просто построить точки. Вывод кода приводит к тому, что показано ниже. Ваш участок может отличаться от моего, так как точки генерируются случайным образом.

На рисунке ниже показан окончательный график после определенного момента времени.

Анимированные сюжеты на Python

Построение анимированного графика синусоидальной волны

Мы можем построить хорошую синусоидальную волну, используя приведенный ниже код. Несколько изменений, которые мы внесли, заключаются в следующем:

  1. Использование двойного значения счетчика, сгенерированного в качестве координаты x, для лучшего построения графика
  2. Уменьшение интервала в функции анимации для более четкой визуализации
x1=[]
y1=[]
i1 = count()
def animate1(j):
    t=next(i1)
    x1.append(2*t)
    y1.append(np.sin(t))
    plt.cla()
    plt.plot(x1,y1)
animation_2 = animation.FuncAnimation(plt.gcf(),animate1,interval=50)
video_2 = animation_2.to_html5_video()
html_code_2 = display.HTML(video_2)
display.display(html_code_2)
plt.tight_layout()
plt.show()

Выходной анимированный график и статический график после определенного интервала показаны ниже.

Анимированные графики Python синусоидальная волна

Построение синуса и косинуса на одном и том же анимированном графике

Проверьте код ниже, чтобы просмотреть обе анимированные кривые в одной анимации. Мы берем отдельные значения y, одно для синуса и одно для косинусной кривой, и строим их на одной анимации. Кроме того, давайте немного оживим его, используя ‘dark_background’ .

plt.style.use('dark_background')
x=[]
y_sin=[]
y_cos=[]
i_n = count()
def animate_n(j):
    t=2*next(i)
    x.append(t)
    y_sin.append(np.sin(t))
    y_cos.append(np.cos(t))
    plt.cla()
    plt.plot(x,y_sin,label="Sine wave",color="red")
    plt.plot(x,y_cos,label="Cosine wave",color="green")
animation_n = animation.FuncAnimation(plt.gcf(),animate_n,interval=500)
video_n = animation_n.to_html5_video()
html_code_n = display.HTML(video_n)
display.display(html_code_n)
plt.tight_layout()
plt.show()

Анимация ниже является результатом приведенного выше кода.

Вывод

Поздравляю! Сегодня вы узнали, как создавать анимированные сюжеты с помощью модуля matplotlib. Надеюсь, вам понравилось кодировать их самостоятельно. Спасибо, что прочитали! Счастливого кодирования и обучения!