使用matplotlib绘制动画的步骤
本文采用moviewriter
来绘制,避免采用matplotlib.animition
的动画绘制方法,将动画简化为图片一帧一帧播放。
使用总共三步,如下代码所示。
补充说明: 在具体使用代码的时候,有时候会出现 subprocess
的Error, 这是因为没有指定 ffmpeg_bin的路径,因而,需要特别注意 以下两句:
ffmpegpath = os.path.abspath("C:/Program Files (x86)/ffmpeg/bin/ffmpeg.exe")
matplotlib.rcParams["animation.ffmpeg_path"] = ffmpegpath
print('ffmpegpath:', FFMpegWriter.bin_path())
关于 matplotlib.animation.FFMpegWriter
的介绍的官方文档:
https://www.osgeo.cn/matplotlib/api/_as_gen/matplotlib.animation.FFMpegWriter.html
import numpy as np
import matplotlib, os
matplotlib.use("Agg")
import matplotlib.pyplot as plt
ffmpegpath = os.path.abspath("C:/Program Files (x86)/ffmpeg/bin/ffmpeg.exe")
matplotlib.rcParams["animation.ffmpeg_path"] = ffmpegpath
from matplotlib.animation import FFMpegWriter
#一, 初始化信息
metadata = dict(title='Movie Test', artist='Matplotlib',
comment='Movie support!')
writer = FFMpegWriter(fps=15, metadata=metadata)
# 数据准备
fig = plt.figure()
x0, y0 = np.linspace(0, np.pi, 100), np.sin(np.linspace(0, np.pi, 100))
# 二, 类似打开文件一样打开一个视频,500代表精度
with writer.saving(fig, "writer_test.mp4", 500):
for i in range(100):
plt.cla() # 注意,清除之前的内容
plt.xlim(-np.pi, np.pi)
plt.ylim(-1.5, 1.5)
x, y = x0[0:i], y0[0:i]
plt.plot(x, y, c= 'r')
#三,抓取当前的帧
writer.grab_frame()
效果参考:https://www.bilibili.com/video/av66377656