7.3. GIF анимация

Сохранение серии графиков в многостраничном документе является хорошим выходом когда нам нужна статика, возможность уделять внимание отдельным частям графиков. Но иногда нам необходима динамика, возможность наблюдать за изменением графика в зависимости от изменения определенного параметра. Такую возможность лучше (проще) всего реализовать в виде gif-анимации:

import numpy as np
import matplotlib.pyplot as plt

#  Импортируем модуль для работы с анимацией:
import matplotlib.animation as animation

t = np.linspace(-4, 4, 300)

fig, ax = plt.subplots()

#  Создаем функцию, генерирующую картинки
#  для последующей "склейки":
def animate(i):
    ax.clear()
    line = ax.plot(t, np.sin(i*t))
    return line

#  Создаем объект анимации:
sin_animation = animation.FuncAnimation(fig, 
                                      animate, 
                                      frames=np.linspace(2, 4, 30),
                                      interval = 10,
                                      repeat = False)

#  Сохраняем анимацию в виде gif файла:
sin_animation.save('моя анимация.gif',
                 writer='imagemagick', 
                 fps=30)

Matplotlib gif анимация

Данный пример демонстрирует самый простой способ создания анимации - использование класса FuncAnimation. Данный клас позволяет создавать экземпляры анимации и сохранять. При создании указываются следующие атрибуты: fig - объект области Figure, который используется для получения рисунков анимации. func - функция которая генерирует кадры анимации, в нашем случае это функция animate(i). Первый аргумент в данной функции должен определять получение кадров анимации, т.е. как то влиять на изменение картинки, в примере выше параметр i используется при построении функции np.sin(i*t). Следующий атрибут frames по сути это может быть любой итерируемый объект, длина которого определяет количество кадров анимации, в примере выше, это np.linspace(2, 4, 30), т.е. 30 кадров. interval задает задержку кадров в миллисекундах (по умолчанию 200). И наконец repeat - управляет повторением последовательности кадров после завершения их показа (по умолчанию True).

После того, как был создан экземпляр анимации можно переходить к его сохранению с помощью метода save(). Данный метод принимает в качестве строки имя выходного файла. Далее следует параметр writer - "создатель" анимации, т.е. модуль который способен склеить и сохранить картинки графика в файл, в нашем случае используется imagemagick так как мы хотим создать gif-анимацию. И последний используемый параметр - fps - количество кадров в секунду. Помимо этого может быть указан параметр dpi - разрешение (количество точек на 1 длинны) получаемых кадров. Данный параметр позволяет повысить качество анимации, но в то же время возрастает и объем конечного файла.