Matplotlib ArtistAnimation方式创建动画

前面学习了回调函数animation.FuncAnimation方式来创建动画,这种方式是有很大的优势,因为它是按需地更新数据,而不需要一次性地生成所有的数据,这样占用内存资源是比较小的,当然它也是有一定的不足之处,当数据计算量大时,就会影响动画的输出速度。如果对动画的输出有速度的要求,或者说帧速度比较严格的,就可以采用另外一种方式,就是艺术家方式ArtistAnimation。它刚好与回调方式相反,需要预先生成动画每一帧的数据,然后一次性输入给ArtistAnimation对象,它就会把整个动画数据一帧一帧地播放出来,减少了数据的计算量。这两种方式都是可以生成动画,具体看自己的需求,那种方式可以满足,就采用那种方法。

下面就来通过例子来演示艺术家方式ArtistAnimation的动画实现过程。先来看一下这个类的定义:

matplotlib.animation.ArtistAnimation(fig, artists, *args, **kwargs)

  • 第一个参数fig是绘图用的画布,主要用来显示图像和缩放大小。

  • 第二个参数artists是表示每个帧绘图数据显示的对象列表,程序里会遍历列表,每一项生成一帧动画帧。

  • 第三个参数interval是每帧延时时间,与前面的回调函数一样的。

  • 第四个参数repeat_delay是表示重复播放动画之间中的延时,默认是0毫秒。

  • 第五个参数repeat是表示是否播放动画完之后重复播放,当设置True时表示重复播放,默认为重复播放。

  • 第六个参数blit是表示是否使用优化机制,与前面回调函数的意义一样。



有了这个类的说明,以及参数的定义,就可以编写程序了。

ims = []
for i in range(20):
rand = np.random.randn(100) # 100个随机数生成
im = ax.plot(rand) # 显示100数据
ims.append(im) # 保存到列表

这段代码先定义一个列表ims,然后生成20帧的数据,每帧数据由随机数生成100个数据点,然后调用ax.plot把这100个点连接起来,形成曲线。再把显示对象im保存到列表里,以便传送给艺术家对象生成动画。

anim = animation.ArtistAnimation(fig, ims, interval=100)

这行代码,就是调用艺术家对象生成动画。

FFwriter = animation.FFMpegWriter(fps=20, extra_args=['-vcodec', 'libx264'],
metadata = {'title':'demo', 'artist':'极客笔记'})
anim.save('ani-054.mp4', writer = FFwriter)

这两行代码,用来生成MP4文件,增加一些描述数据,以便写到MP4文件里。

运行的结果显示如下:

Matplotlib ArtistAnimation方式创建动画

整个例子的代码如下:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation

plt.rcParams['animation.ffmpeg_path'] = r'D:\ffmpeg-2020-12-20\bin\ffmpeg.exe'


# 创建绘图轴对象
fig, ax = plt.subplots()

# 生成动画绘制所有数据
ims = []
for i in range(20):
        rand = np.random.randn(100)     # 100个随机数生成
        im = ax.plot(rand)             # 显示100数据
        ims.append(im)                  # 保存到列表

anim = animation.ArtistAnimation(fig, ims, interval=100)

#保存的动画视频文件名为当前文件夹下的ani-054.mp4,帧率为20帧每秒,格式为MP4。
FFwriter = animation.FFMpegWriter(fps=20, extra_args=['-vcodec', 'libx264'],
                                  metadata = {'title':'demo', 'artist':'蔡军生'})
anim.save('ani-054.mp4', writer = FFwriter)

plt.show()  # 会一直循环播放动画

赞(0)
未经允许不得转载:极客笔记 » Matplotlib ArtistAnimation方式创建动画

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
Matplotlib 入门
Matplotlib 入门Matplotlib 安装之Linux操作系统Matplotlib 安装之Windows系统Matplotlib 安装之Mac OS X系统Matplotlib 安装之使用 Windows Installer安装程序Matplotlib 使用*.whl文件快速安装Matplotlib 绘图区域Matplotlib 设置绘图区域大小Matplotlib 网格线的颜色和刻度Matplotlib 坐标轴的标签和标题Matplotlib 指南Matplotlib pyplot指南
Matplotlib 几何图形
Matplotlib 画直线Matplotlib 图形失真Matplotlib 画圆弧示意图Matplotlib 用直线方式画圆Matplotlib 画椭圆示意图Matplotlib 画旋转向量示意图Matplotlib 使用patches绘制几何图形Matplotlib 使用模块patches的Wedge实现饼图Matplotlib 嵌套子图显示Matplotlib 两个子图显示
Matplotlib 颜色
Matplotlib 颜色Matplotlib 多边形颜色填充Matplotlib 不规则颜色填充Matplotlib 条件选择区域颜色填充
Matplotlib 坐标轴
Matplotlib 辅助指示坐标轴Matplotlib 公式显示Matplotlib 显示数学曲线Matplotlib 同一坐标里显示多条曲线Matplotlib 同一坐标里双Y轴显示Matplotlib 双Y轴显示时把图例显示到一起Matplotlib 三个Y轴显示Matplotlib 隐藏刻度方式显示三个Y轴Matplotlib 四个Y轴显示Matplotlib 一元线性回归显示Matplotlib X轴日期显示Matplotlib X轴年份采用四位显示Matplotlib X轴按小时显示Matplotlib X轴设置为弧度坐标Matplotlib X轴显示角度Matplotlib X轴显示特殊的标签Matplotlib 移动坐标轴位置Matplotlib 与数据区图像相对位置移动坐标轴位置
Matplotlib 函数
Matplotlib 函数plot 展现变量的趋势变化Matplotlib 函数plot 创建带文本标签的折线图Matplotlib 函数scatter 寻找变量之间的关系Matplotlib 函数xlim 设置x轴的数值显示范围Matplotlib 函数xlabel 设置x轴的标签文本Matplotlib 函数grid 绘制刻度线的网格线Matplotlib 函数axhline 绘制平行于x轴的水平参考线Matplotlib 函数axvspan 绘制垂直于x轴的参考区域Matplotlib 函数annotate 添加图形内容细节的指向型注释文本Matplotlib 函数text 添加图形内容细节的无指向型注释文本Matplotlib 函数title 添加图形内容的标题Matplotlib 函数legend 标示不同图形的文本标签图例Matplotlib 函数bar 用于绘制柱状图Matplotlib 函数barh 用于绘制条形图Matplotlib 函数hist 用于绘制直方图Matplotlib 函数pie 用于绘制饼图Matplotlib 函数polar 用于绘制极线图Matplotlib 函数scatter 用于绘制气泡图Matplotlib 函数stem 用于绘制棉棒图Matplotlib 函数boxplot 用于绘制箱线图Matplotlib 函数errorbar 用于绘制误差棒图Matplotlib 函数subplots和函数subplot区别
Matplotlib 动画和视频
Matplotlib ffmpeg安装Matplotlib 基本动画过程Matplotlib FuncAnimation方式创建动画Matplotlib ArtistAnimation方式创建动画Matplotlib 绘制一条螺旋曲线Matplotlib 输出gif文件Matplotlib 调用ImageMagick输出gif文件
Matplotlib 3D
Matplotlib 3D的坐标系Matplotlib 绘制3D图像
Matplotlib 导入导出
Matplotlib 保存绘图结果为PDF文件
Matplotlib 画线
Matplotlib 画线