Создание анимации в MatPlotlib достаточно просты. Тем не менее, это может быть сложно при запуске, и нет никакого консенсуса для лучшего способа создания их. В этой статье я покажу вам несколько методов, которые вы можете использовать для удивительной анимации в MatPlotlib.
Пример анимации Matplotlib
Самое сложное о создании анимации в Matplotlib приходит с идеей для них. Эта статья охватывает основные идеи для линейных участков, и я могу покрыть другие участки, такие как разброс и 3D-участки в будущем. После того, как вы понимаете эти преодоления принципов, вы можете оживить другие участки без усилий.
Есть два класса, которые вы можете использовать для создания анимации: Funcanimation
и Артистана.
Я фокусирую на Funcanimation
Как это более интуитивно понятно и широко используется один из двух.
Использовать Funcanimation,
Определите функцию (часто называемую animate
), который matplotlib неоднократно вызывает создание следующего кадра/изображения для вашей анимации.
Создать анимацию с Funcanimation
В Matplotlib следуйте этим семи шагам:
- Иметь четкую картину в вашем уме о том, что вы хотите, чтобы анимация сделать
- Импортировать стандартные модули и
Функциональность
- Настроить
Рисунок
,Оси
иЛиния
объекты - Инициализировать данные
- Определите свою анимацию –
анимация (я)
- Пройти все до
Функциональность
- Отображать или сохранить свою анимацию
Давайте создадим синусоидальную волну, которая нарисовать на нас matplotlib ‘. Обратите внимание, что этот код может выглядеть странно для вас, когда вы впервые прочитаете его. Создание анимации с MATPLOTLIB отличается от создания статических участков.
# Standard imports import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation
Импорт Numpy и matplotlib, используя свои стандартные псевдонимы и Funcanimation
от matplotlib.animation
Отказ
# Set up empty Figure, Axes and Line objects fig, ax = plt.subplots() # Set axes limits so that the whole image is included ax.set(xlim=(-0.1, 2*np.pi+0.1), ylim=(-1.1, 1.1)) # Draw a blank line line, = ax.plot([], [])
Настройте Рисунок
и Оси
Объекты, использующие plt.subplots () и – используя AX.SET ()
– Установите ограничения оси X- и Y к тому же размеру, что и нормальная кривая синуса – от 0 до 2π на оси X и от -1 до 1 на оси Y. Обратите внимание, что я включал прокладку 0,1 на каждую предел оси, чтобы вы могли видеть всю линию MARPLOTLIB.
Затем я сделал то, что вы, вероятно, никогда не делали раньше: я нарисовал пустую строку. Вы должны сделать это, потому что анимация
Изменяет эту линию, и она может только модифицировать то, что уже существует. Вы также можете подумать об этом как инициализацию пустой строки объекта, который вы скоро заполните данные.
Обратите внимание, что вы должны включить запятую после линия,
! Метод участка возвращает кортеж, и вам нужно распаковать его, чтобы создать переменную линия
Отказ
# Define data - one sine wave x = np.linspace(0, 2*np.pi, num=50) y = np.sin(x)
Далее определите данные, которые вы хотите построить. Вот, я замышляю одну синусоюру, поэтому я использовал np.linspace () Чтобы создать данные оси X и созданные y
Призывая np.sin ()
на х
Отказ Благодаря Numpy вещание Легко применять функции для Numpy Armays!
# Define animate function def animate(i): line.set_data(x[:i], y[:i]) return line,
Определите анимация (я)
функция. Его аргумент Я
Это целое число, начиная от 0 и до общего количества кадров, которые вы хотите в вашей анимации. Я использовал line.set_data ()
Метод нарисовать первое Я
Элементы кривой синуса для обоих х
и y
Отказ Обратите внимание, что вы возвращаете линия,
С запятой снова, потому что вам нужно вернуть ИТЕРАЛНЫЙ и добавление запятой делает его кортежом.
# Pass to FuncAnimation anim = FuncAnimation(fig, animate, frames=len(x)+1, interval=30, blit=True)
Создать Funcanimation
объект. Сначала пропустите Рисунок
и анимация
Функция как позиционные аргументы.
Далее установите количество Рамы
к Len (x) +1
так что он включает в себя все значения в х
Отказ Это работает как Диапазон ()
функция, и поэтому даже хоть х
Имеет длину 50, Python рисует только рамы от 0 до 49, а не 50-й участник. Итак, добавьте еще один, чтобы нарисовать весь сюжет.
Интервал
Как долго в миллисекундах Matplotlib ждет между рисунком следующей частью анимации. Я обнаружил, что 30 работает хорошо, как генерал. Большее число означает, что Matplotlib ждет дольше между рисунком, и поэтому анимация медленнее.
Наконец, набор Blit = True
Так что это только перерисовывает части, которые не были нарисованы раньше. Это не имеет большого значения для этого примера, но как только вы создадите более сложные участки, вы должны использовать это; Для MatPlotlib может занять некоторое время для создания анимации (ожидание нескольких минут распространена для больших).
# Save in the current working directory anim.save('sin.mp4')
Я сохранил анимацию как видео называемое «SIN.MP4» в текущий рабочий каталог.
Откройте свой текущий рабочий каталог, найдите сохраненное видео и воспроизведите его. Поздравляю! Вы только что сделали свою первую анимацию в Matplotlib!
Некоторые из шагов, которые вы предпринимаете для создания анимации, являются уникальными и могут чувствовать себя необычно, когда вы впервые попробуете их. Я знаю, что я чувствовал себя странным в первый раз, когда я использовал их. Не волнуйтесь, тем больше вы тренируетесь и экспериментируете, тем легче становится.
Вот полный код:
# Standard imports import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import FuncAnimation # Set up empty Figure, Axes and Line objects fig, ax = plt.subplots() # Set axes limits so that the whole image is included ax.set(xlim=(-0.1, 2*np.pi+0.1), ylim=(-1.1, 1.1)) # Draw a blank line line, = ax.plot([], []) # Define data - one sine wave x = np.linspace(0, 2*np.pi, num=50) y = np.sin(x) # Define animate function def animate(i): line.set_data(x[:i], y[:i]) return line, # Pass to FuncAnimation anim = FuncAnimation(fig, animate, frames=len(x)+1, interval=30, blit=True) # Save in the current working directory anim.save('sin.mp4')
Обратите внимание, что если этот последний шаг не сработал для вас, это, вероятно, потому что у вас не установлено правильных библиотек – я покажу вам, что устанавливать прямо сейчас.
Связанный:
- MATPLOTLIB 3D участник – полный учебник
- Matplotlib boxplot – полезное иллюстрированное руководство
- Легенда Matplotlib
- Matplotlib imshow.
- Matplotlib subplot и Подразделение
- Матплотлиб линия сюжет
- Matplotlib рассеивает участок
- Матплотлиб гистограмма
Анимация Matplotlib Сохранить
Чтобы сохранить свою анимацию в MatPlotlib, используйте .save ()
Метод на вашем Funcanimation
объект. Вы можете либо сохранить их как видео MP4 или GIFS.
Matplotlib анимация Сохранить MP4
Чтобы сохранить анимацию как видео MP4, сначала установите библиотеку FFMPEG. Это невероятно мощный инструмент командной строки, и вы можете скачать его из их Официальный сайт , Github или, если вы используете Анаконда бежать CODA Установить FFMPEG
Отказ
Как только вы создали свою анимацию, запустите anim.save ('name.mp4',)
И Python сохраняет вашу анимацию как видео «name.mp4» в вашем текущем рабочем каталоге.
Обратите внимание, что писатель по умолчанию является FFMPEG, и поэтому вам не нужно явно указать его, если вы не хотите.
Matplotlib анимация Сохранить GIF
Чтобы сохранить анимацию как GIFS, сначала установите библиотеку ImageMagick. Это инструмент командной строки, и вы можете скачать его из их Официальный сайт , Github или если вы используете Анаконда бежать CONDA Установка -C Conda-Forge ImageMagick
Отказ
Как только вы создали свою анимацию, запустите anim.save ('name.gif',)
И Python сохраняет вашу анимацию в качестве GIF ‘Name.gif’ в вашем текущем рабочем каталоге.
anim.save('sin.gif', writer='imagemagick')
Обратите внимание, что ImageMagick, так и FFMPEG являются инструментами командной строки, а не библиотеки Python. Как таковой, вы не можете установить их, используя Пип
Отказ Для этих инструментов есть некоторые обертки Python, но они не Что вам нужно установить.
Animation Matplotlib Jupyter.
Если вы записываете свой код в ноутбуках Jupyter (что-то, что я настоятельно рекомендую), и не хочу сохранять свои анимации на диск каждый раз, вы можете разочарованы, чтобы слышать, что ваша анимация не работает из коробки. По умолчанию Jupyter отображает графики как статические изображения PNG, которые не может быть анимирован Отказ
Чтобы исправить это, у вас есть пара вариантов на выбор:
-
% matplotlib ноутбук
волшебная команда или - Изменение
plt.rcparams
толковый словарь
Если вы запустите % matplotlib ноутбук
В кодовой ячейке в верхней части вашего ноутбука, то все ваши участки рендерируют в интерактивных окнах.
# Run at the top of your notebook %matplotlib notebook
Поскольку я не могу показать вам интерактивные окна Jupyter в сообщении в блоге, приведенное выше видео приведена результат запуска кривой чертежа греха выше.
Этот метод, безусловно, самый простой, но дает вам наименьшее управление. Для одной вещи кнопки внизу ничего не делают. Кроме того, он продолжает работать, пока не нажму кнопку выключения в верхней части … Но когда вы делаете, у вас нет возможности включить его снова!
Я предпочитаю использовать по умолчанию % Matplotlin Inline
Стиль для всех моих участков, но вы можете выбрать, в зависимости от того, что вы хотите.
Другой вариант – изменить plt.rcparams
толковый словарь. Этот словарь контролирует поведение по умолчанию для всех ваших участков MATPLOTLIB, таких как размер рисунка, размер шрифта, и как ваши анимации должны отображаться при их вызове.
Если вы распечатаете его к экрану, вы можете увидеть все параметры, которые он контролирует.
Тот, кого вы заинтересованы в том, это анимация.html
, что это Нет
по умолчанию. Другие варианты: 'html5'
и 'jshtml'
Отказ
Посмотрим, что произойдет, когда вы устанавливаете plt.rcparams
к тем вариантам. Во-первых, давайте посмотрим на 'html5'
Отказ
plt.rcParams['animation.html'] = 'html5' anim
Теперь анимация отображается в виде видео HTML5, которое воспроизводит как цикл. Вы можете начать/остановить его, используя кнопки PLAY/PAUSE, но это об этом. По моему опыту, это видео играет намного более плавное, чем интерактивные окна, произведенные % matplotlib ноутбук
Отказ
Обратите внимание, что вышеуказанное видео – это захват экрана того, что вы видите в ноутбуках Jupyter.
Теперь давайте посмотрим на гораздо более мощный вариант: 'jshtml'
который обозначает JavaScript HTML.
plt.rcParams['animation.html'] = 'jshtml' anim
Теперь ваша анимация отображается в интерактивных окнах JavaScript! Эта опция, безусловно, самый мощный доступный для вас.
Вот что каждый из клавиш делает (начиная с левого):
- Ускорение вверх/замедление: +/-
- Перейти к концу/начать: | <> |
- Переместить один кадр назад/вперед: | |
- Воспроизвести его назад/вперед:
- пауза с ключом паузы
Более того, вы можете выбрать его «один раз», «петлю» бесконечно или воспроизводить вперед и назад бесконечно, используя «отражение».
Обратите внимание, что вышеуказанное видео – это захват экрана того, что вы видите в ноутбуках Jupyter.
Чтобы все ваши анимации рендерируют как видео HTML5, либо в интерактивных форматах JavaScript, установите plt.rcparams
в верхней части вашего кода.
Вывод
Отлично! Теперь вы знаете, как создать основные анимации в MatPlotlib. Вы знаете, как использовать Funcanimaton
, как сохранить их как видео или GIFS, а анимация с участием в ноутбуках Jupyter.
Вы видели, как создавать «рисовать» участки, но есть много других вещей, которые вы можете сделать, например, создавая движущиеся участки, анимирующие 3D-участки и даже графики рассеяния. Но мы оставим их за другой статью.
Куда пойти отсюда?
Вы хотите, чтобы вы могли быть программистом на полный рабочий день, но не знаете, как начать?
Ознакомьтесь с чистым упаковочным величином, где Chris – Creator of Finxter.com – учит вас стать фрилансером Python в 60 дней или вернуть деньги!
https://tinyurl.com/become-a-python-freelancer
Неважно, если вы начинаете питон или Python Pro. Если вы не делаете шесть фигур/год с Python прямо сейчас, вы узнаете что-то из этого вебинара.
Это доказаны, методы NO-BS, которые получают ваши результаты быстро.
Этот вебинар не будет онлайн навсегда. Нажмите на ссылку ниже, прежде чем сиденья наполнится и научитесь стать фрилансером Python, гарантированно.
https://tinyurl.com/become-a-python-freelancer
Expert Writer & Content Creator – наука о науке и машине. – Я помогаю образовательным компаниям создавать привлечение в блоге и видеоконтентах преподавания данных науки для начинающих. В отличие от моих конкурентов, я узнаю новые концепции каждый день и так понимаю, что это нравится быть студентом. Мои статьи легко понять, эффективны и приятно читать. Мои видео достойны, участвуют и подробно. – Работать со мной, пожалуйста, обратитесь к Upwork https://tinyurl.com/hire-adam-murphy