1

尝试使用 matplotlib 的动画模块来创建网格变化的动画。使用的库。

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

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

使用 geopandas 创建网格(可以使用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 会创建具有惊人数量的记录/捕获帧的静态图像。

4

1 回答 1

0

我怀疑您可能需要使用init_func参数 in FuncAnimation,这是用于绘制清晰框架的函数。更新功能旨在更新图中的对象,而不是绘制更多。

是一个关于如何使用更新和初始化函数的小教程。如果您正在学习如何制作动画,我建议您先从简单的东西开始。

于 2020-05-11T08:43:37.207 回答