Рубрики

Построение графиков в Python | Набор 3

Построение графиков в Python | Комплект 1
Построение графиков в Python | Набор 2

Matplotlib — довольно обширная библиотека, которая также поддерживает анимацию графиков. Инструменты анимации сосредоточены вокруг базового класса matplotlib.animation , который обеспечивает основу, на которой строится функциональность анимации. Основными интерфейсами являются TimedAnimation и FuncAnimation, и из них наиболее удобным для использования является FuncAnimation .

Установка:

  • Matplotlib : обратитесь к графическому построению в Python | Комплект 1
  • Numpy: Вы можете установить модуль numpy, используя следующую команду pip:
    pip install numpy
  • FFMPEG : требуется только для сохранения анимации как видео. Исполняемый файл можно скачать здесь .

Реализация:

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

import matplotlib.pyplot as plt

import matplotlib.animation as animation

import numpy as np

  
# создать фигуру, ось и элемент графика

fig = plt.figure()

ax = plt.axes(xlim=(-50, 50), ylim=(-50, 50))

line, = ax.plot([], [], lw=2)

  
# функция инициализации

def init():

    # создание пустого графика / рамки

    line.set_data([], [])

    return line,

  
# списки для хранения точек осей x и y

xdata, ydata = [], []

  
# функция анимации

def animate(i):

    # t это параметр

    t = 0.1*i

      

    # x, y значения для построения

    x = t*np.sin(t)

    y = t*np.cos(t)

      

    # добавление новых точек в список точек осей x, y

    xdata.append(x)

    ydata.append(y)

      

    # установить / обновить данные осей X и Y

    line.set_data(xdata, ydata)

      

    # возврат строки

    return line,

      
# установка заголовка для сюжета

plt.title('A growing coil!')

# скрытие деталей оси

plt.axis('off')

  
# вызвать аниматора

anim = animation.FuncAnimation(fig, animate, init_func=init,

                               frames=500, interval=20, blit=True)

  
# сохранить анимацию как MP4 видео файл

anim.save('animated_coil.mp4', writer = 'ffmpeg', fps = 30)

  
# показать сюжет
plt.show()

Вот как выглядит выходная анимация:

Теперь давайте попробуем разобраться в коде по частям:

  • fig = plt.figure()
    ax = plt.axes(xlim=(-50, 50), ylim=(-50, 50))
    line, = ax.plot([], [], lw=2)

    Здесь мы сначала создаем фигуру, то есть контейнер верхнего уровня для всех наших участков.
    Затем мы создаем элемент axes axe, который действует как подзаговор. Диапазон / предел для осей x и y также определяются при создании элемента оси.
    Наконец, мы создаем элемент сюжета с именем line . Первоначально точки осей x и y были определены как пустые списки, а ширина линии (lw) была установлена как 2.

  • def init():
        line.set_data([], [])
        return line,

    Теперь мы объявляем функцию инициализации init . Эта функция вызывается аниматором для создания первого кадра.

  • def animate(i):
        # t is a parameter
        t = 0.1*i
        
        # x, y values to be plotted
        x = t*np.sin(t)
        y = t*np.cos(t)
        
        # appending new points to x, y axes points list
        xdata.append(x)
        ydata.append(y)
        
        # set/update the x and y axes data
        line.set_data(xdata, ydata)
        
        # return line object
        return line,

    Это самая важная функция вышеуказанной программы. Функция animate () вызывается аниматором снова и снова для создания каждого кадра. Количество вызовов этой функции определяется количеством кадров, которое передается в качестве аргумента кадров аниматору.
    Функция animate () принимает в качестве аргумента индекс i-го кадра.

    t = 0.1*i

    Здесь мы умно используем индекс текущего кадра в качестве параметра!

    x = t*np.sin(t)
    y = t*np.cos(t)

    Теперь, поскольку у нас есть параметр t , мы можем легко построить любое параметрическое уравнение. Например, здесь мы строим спираль, используя ее параметрическое уравнение.

    line.set_data(xdata, ydata)
    return line,

    Наконец, мы используем функцию set_data () для установки данных x и y, а затем возвращаем объект графика, линию .

  • anim = animation.FuncAnimation(fig, animate, init_func=init,
                                   frames=500, interval=20, blit=True)

    Теперь мы создаем объект FuncAnimation, anim . Это принимает различные аргументы, объясненные ниже:
    рис : рисунок для построения.
    animate : функция, которая будет вызываться повторно для каждого кадра .
    init_func : функция, используемая для рисования чистой рамки. Вызывается один раз перед первым кадром.
    кадры : количество кадров. (Примечание: кадры также могут быть итерируемыми или генераторами.)
    интервал : продолжительность между кадрами (в миллисекундах)
    blit : setting blit = True означает, что будут нарисованы только те части, которые изменились.

  • anim.save('animated_coil.mp4', writer = 'ffmpeg', fps = 30)

    Теперь мы сохраняем объект аниматора как видеофайл, используя функцию save () . Вам понадобится автор фильма для сохранения анимационного видео. В этом примере мы использовали FFMPEG Movie Writer. Итак, писатель установлен как 'ffmpeg'.
    fps обозначает кадр в секунду.

Пример 2

Этот пример показывает, как можно сделать вращающуюся кривую, применяя простую математику!

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

import matplotlib.pyplot as plt

import matplotlib.animation as animation

import numpy as np

  
# создать фигуру, ось и элемент графика

fig = plt.figure()

ax = plt.axes(xlim=(-25, 25), ylim=(-25, 25))

line, = ax.plot([], [], lw=2)

  
# функция инициализации

def init():

    # создание пустого графика / рамки

    line.set_data([], [])

    return line,

  
# набор точек для звезды (может быть любой кривой)

p = np.arange(0, 4*np.pi, 0.1)

x = 12*np.cos(p) + 8*np.cos(1.5*p)

y = 12*np.sin(p) - 8*np.sin(1.5*p)

  
# функция анимации

def animate(i):

    # t это параметр

    t = 0.1*i

      

    # x, y значения для построения

    X = x*np.cos(t) - y*np.sin(t)

    Y = y*np.cos(t) + x*np.sin(t)

      

    # установить / обновить данные осей X и Y

    line.set_data(X, Y)

      

    # возврат строки

    return line,

      
# установка заголовка для сюжета

plt.title('A rotating star!')

# скрытие деталей оси

plt.axis('off')

  
# вызвать аниматора

anim = animation.FuncAnimation(fig, animate, init_func=init,

                               frames=100, interval=100, blit=True)

  
# сохранить анимацию как MP4 видео файл

anim.save('basic_animation.mp4', writer = 'ffmpeg', fps = 10)

  
# показать сюжет
plt.show()

Вот как выглядит результат вышеприведенной программы:

Здесь мы использовали некоторую простую математику, чтобы вращать данную кривую.

  • Форма звезды получается путем помещения k = 2,5 и 0 <t <4 * pi в параметрическое уравнение, приведенное ниже:

    То же самое было применено здесь:

    p = np.arange(0, 4*np.pi, 0.1)
    x = 12*np.cos(p) + 8*np.cos(1.5*p)
    y = 12*np.sin(p) - 8*np.sin(1.5*p)
  • Теперь в каждом кадре мы вращаем кривую звезды, используя концепцию вращения в комплексных числах. Пусть x, y две ординаты. Затем, после поворота на угол тета, новые ординаты:

    То же самое было применено здесь:

    X = x*np.cos(t) - y*np.sin(t)
    Y = y*np.cos(t) + x*np.sin(t)

В общем, анимация — это отличный инструмент для создания удивительных вещей, и с их помощью можно создавать еще больше вещей.

Таким образом, именно так можно создавать и сохранять анимированные графики с помощью Matplotlib.

Эта статья предоставлена Нихилом Кумаром . Если вам нравится GeeksforGeeks и вы хотели бы внести свой вклад, вы также можете написать статью, используя contrib.geeksforgeeks.org, или отправить свою статью на электронный адрес contrib@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Рекомендуемые посты:

Построение графиков в Python | Набор 3

0.00 (0%) 0 votes