Метод сохранения анимации Matplotlib возвращает статическое изображение с неожиданным количеством кадров

Пробуем работать с модулем анимации matplotlib, чтобы создать анимацию изменения сетки. Используемые библиотеки.

import numpy as np
import geopandas as gpd
from shapely.geometry import Polygon

import matplotlib.animation as animation
import matplotlib.pyplot as plt

Создание сетки с геопандами (полное изображение сетки можно увидеть с grid.plot(edgecolor = 'white') команда):

xmin,ymin,xmax,ymax = -2, -2, 2, 2
length = 0.1
wide = 0.1
columns = list(np.arange(int(np.floor(xmin)), int(np.ceil(xmax)), wide))
rows = list(np.arange(int(np.floor(ymin)), int(np.ceil(ymax)), length))
rows.reverse()
grid = gpd.GeoDataFrame(columns = ['geometry'])
for row in rows:
    for column in columns:
        grid.loc[len(grid)]=Polygon([(column, row), (column + wide, row), (column + wide, row - length), (column, row - length)])

Функция анимации внешнего вида каждого многоугольника:

def update_grid_next(curr):
    ax = plt.gca()

    ax.axis([-2, 2, -2.1, 1.9])
    ax.annotate('n = %s'%curr, [-2, -2])


    ax.plot(*grid.geometry[curr].exterior.xy, color = 'b')
    ax.fill(*grid.geometry[curr].exterior.xy, alpha=0.5, fc='r', ec='none')

Когда я запускаю следующий код, в Jupyter Notebook отображается анимация, как я ожидал (более или менее):

%matplotlib
fig = plt.figure()
a = animation.FuncAnimation(fig, update_grid_next, interval=50, frames = range(75))

На графике один за другим появляются многоугольники. Однако, когда я пытаюсь сохранить видео сa.save(r'C:\Users\fasbo\k.mp4')matplotlib создает статическое изображение с удивительным количеством записанных / захваченных кадров.

1 ответ

Я подозреваю, что вам может понадобиться использовать init_func аргумент в FuncAnimation, которая используется для рисования четкой рамки. Функция обновления предназначена для обновления объектов на рисунке вместо того, чтобы рисовать больше.

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

Другие вопросы по тегам