Matplotlib系列(七):动画
Matplotlib系列目录
文章目录
- 一、 简介
- 二、 思维导图
- 三、 Matplotlib动画及图形修改操作
- 1. 手写代码更新图形实现动画
- 2. animation模块动画
- 2.1 Animation类简介
- 2.2 FuncAnimation动画
- 2.3 ArtistAnimation动画
- 2.4 保存动画
- 3. 常用图形更新函数
一、 简介
matplotlib的animation模块可以实现高效的动画绘制,并能够保持到gif或者视频文件中。
matplotlib中的图形,如线条、点、坐标系、柱形图等等都可以通过代码修改,为控制图像显示,以及实现动画提供支持。
Matplotlib系列将Matplotlib的知识和重点API,编制成思维导图和重点笔记形式,方便记忆和回顾,也方便应用时参考,初学者也可以参考逐步深入学习。
二、 思维导图
三、 Matplotlib动画及图形修改操作
1. 手写代码更新图形实现动画
自己写代码,循环重绘图形可以实现简单的动画。
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.subplots()t=np.linspace(0,10,100)
y=np.sin(t)
ax.axis([0,10,0,2])
ax.set_aspect(3)while True:ax.plot(t,y)plt.pause(0.1) #显示图形并暂停。注意用time.sleep将不起作用。ax.cla() #清除图形t+=np.pi/30 #更新数据y=np.sin(t)
该方法仅适用于简单、低性能的使用。
对于要求更高的程序,应该使用动画模块。
2. animation模块动画
2.1 Animation类简介
Animation类是matplotlib.animation模块中所有动画类的父类。其子类集成关系如下:
- Animation:动画类的基类
- TimedAnimation:继承自Animation。指定时间间隔,绘制一帧图形,实现动画
- FuncAnimation:继承自TimedAnimation。通过重复调用fun()方法来绘制动画
- ArtistAnimation:继承自TimedAnimation。使用一组不变的Artist对象绘制动画。
- TimedAnimation:继承自Animation。指定时间间隔,绘制一帧图形,实现动画
最常用的方法是使用FuncAnimation创建动画
2.2 FuncAnimation动画
- FuncAnimation(fig, func, frames=None, init_func=None, fargs=None)
- fig:用于显示动画的figure对象
- func:用于更新每帧动画的函数。func函数的第一个参数为帧序号。返回被更新后的图形对象列表。
- frames:动画长度,帧序号组成的列表
- 依次将列表中数值传入func函数
- frames是数值时,相当于range(frames)
- 默认值为itertools.count,即无限递归序列,从0开始,每次加1。
- 实际上也可以传递用户数据(类似fargs),用于更新帧。
- init_func:自定义开始帧,即绘制初始化图形的初始化函数
- fargs:额外的需要传递给func函数的参数。
- interval:更新频率,单位是毫秒。
- repeat:布尔值,默认为True。是否是循环动画。
- repeat_delayint:当repeat为True时,动画延迟多少毫秒再循环。默认为0。
- blit:选择更新所有点,还是仅更新产生变化的点。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig = plt.figure()
ax = fig.subplots()t=np.linspace(0,10,100)
y=np.sin(t)
ax.set_aspect(3)
ax.plot(t,y,'--',c='gray')
line=ax.plot(t,y,c='C2')def update(i): #帧更新函数global t #直接引用全局变量,也可以通过函数的frames或fargs参数传递。t+=0.1y=np.sin(t)line[0].set_ydata(y)return lineani=FuncAnimation(fig,update,interval=100) #绘制动画
plt.show() #显示动画
在编写时通常会用到set_data,set_xdata,set_ydata等类似的方法更新图形数据
2.3 ArtistAnimation动画
ArtistAnimation(fig, artists)
+ fig:用于显示动画的figure对象
+ artists:每帧需要显示的artists列表。
+ interval:更新频率,单位是毫秒。
+ repeat:布尔值,默认为True。是否是循环动画。
+ repeat_delayint:当repeat为True时,动画延迟多少毫秒再循环。默认为0。
+ blit:选择更新所有点,还是仅更新产生变化的点。
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
fig = plt.figure()
ax = fig.subplots()arts=[]
t=np.linspace(0,np.pi*2,20)
for i in range(20):t+=np.pi*2/20y=np.sin(t)lines=ax.plot(y,'--',c='gray') #绘制一帧图形arts.append(lines) #每帧图形都保存到列表中ani=ArtistAnimation(fig,arts,interval=200) #绘制动画
#ani.save("animate_artists_basic.gif") #保存动画
plt.show() #显示动画
2.4 保存动画
- animation.save(filename):通过绘制每一帧将动画存为影片文件。
- filename参数:保存的动画文件名称,如’mov.gif’,‘mov.mp4’。
+ - writer参数:保持动画的库。MoviewWriter对象或者字符串。默认值’ffmpeg’。
- “pillow”:PillowWriter,用pillow库写如动画文件。
- “ffmpeg”:FFMpegWriter,基于ffmpeg库写动画。
- “ffmpeg_file”:FFMpegFileWriter,基于文件的FFMpegWriter,用ffmpeg库把帧写入临时文件,然后拼接成动画。
- “imagemagick”:ImageMagickWriter,基于管道的动画GIF。帧通过管道传输到ImageMagick并写入文件。
- “imagemagick_file”:基于文件的imagemagick写动画。
- “hmtl”:HTMLWriter,基于javascript html的动画。
- fps:每秒帧数,默认根据动画的interval确定
- dpi:每英寸点数,默认和figure相同。可以控制动画大小尺寸。
- codec:编码格式,默认’h264’
- filename参数:保存的动画文件名称,如’mov.gif’,‘mov.mp4’。
- animation.to_html5_video():返回html5 标签,用base64文本编码直接保持。
- embed_limit参数:动画文件大小限制,单位为MB。默认为20MB,超出限制则不创建动画。
- animation.to_jshtml():返回js动画,用base64文本编码。
- fps:每秒帧数,默认根据动画的interval确定。
- embed_frames:布尔类型,是否嵌入帧。
- default_mode:‘loop’,‘once’或者’reflect’
# ani.save("movie.mp4")writer = animation.FFMpegWriter(fps=15, bitrate=1800)
ani.save("movie.mp4", writer=writer)
3. 常用图形更新函数
所有可见图形都继承自Artist类。并且具有如下函数
- Artist
- draw():重绘图形
- get_visible(),set_visible()
- get_alpha(),set_alpha()
- get_zorder(),set_zorder()
- remove():从图形中移除
- get_children():获取子对象列表
坐标轴具有如下常用操作
- Axes
- cla():清除坐标系中的图形
- clear():同cla
- set_axis_on(), set_axis_off()
- autoscale_view():自动缩放视窗
- set_aspect():设置坐标系比例
绘图函数返回的图形对象通常是Line2D、Patch、Text。常用的更新函数有:
- set_xdata(x):修改x数据
- set_ydata(y):修改y数据
- set_data():同时修改x,y数据。参数为(2,N)数组,或者两个一维数组。
- plot函数中每个参数都可以用get_, set_函数操作。比如:get_linestyle(),set_linestyle()
- set(xdata=,ydata=…)方式也可以设置参数。
Matplotlib系列目录
个人总结,部分内容进行了简单的处理和归纳,如有谬误,希望大家指出,持续修订更新中。
修订历史版本见:https://github.com/hustlei/AI_Learning_MindMap
未经允许请勿转载。
Matplotlib系列(七):动画相关推荐
- Python 数据分析三剑客之 Matplotlib(七):饼状图的绘制
CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...
- 计算机动漫与游戏制作与影视,中职中专计算机动漫与游戏制作专业系列教材·动画与影视后期制作:After Effects CS4技能应用教程...
中职中专计算机动漫与游戏制作专业系列教材·动画与影视后期制作:After Effects CS4技能应用教程 语音 编辑 锁定 讨论 上传视频 <中职中专计算机动漫与游戏制作专业系列教材·动画与 ...
- Web前端开发人员和设计师必读文章推荐【系列七】
这篇文章主要收录了十二月份发布在梦想天空的优秀文章,特别推荐给Web开发人员和设计师阅读.梦天空博客关注前端开发技术,展示最新 HTML5 和 CSS3 技术应用,分享实用的 jQuery 插件,推荐 ...
- Docker系列 七. Docker 安装Jenkins
Docker系列 七. Docker 安装Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集 ...
- 深入剖析Redis系列(七) - Redis数据结构之列表
前言 列表(list)类型是用来存储多个 有序 的 字符串.在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表.获取 指定索引下标 ...
- Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案
Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案 参考文章: (1)Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案 (2)https://www.cnblogs.com/ ...
- 数学之美 系列七 -- 信息论在信息处理中的应用
数学之美 系列七 -- 信息论在信息处理中的应用 http://googlechinablog.com/2006/05/blog-post_25.html 我们已经介绍了信息熵,它是信息论的基础,我们 ...
- 来自极客标签10款最新设计素材-系列七
为什么80%的码农都做不了架构师?>>> 日期:2013-5-27 来源:GBin1.com 本周我们推荐来自极客标签社区带来的10款免费设计素材,大家可以在这里免费下载你需 ...
- SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现
SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现 原文:SQL Server 2008空间数据应用系列七:基于Bing Maps(Si ...
最新文章
- Python循环中的变量作用域的灵异现象
- VSC为_锐志 VSC 警告灯间歇点亮
- C语言中声明和定义的区别
- nginx php mysql一些常用命令(windows linux)
- linux flush 文件,Linux文件系统学习:io的plug过程-blk_flush_plug_list的情况
- 加速前进!华为已在全球多地注册“鸿蒙”商标
- js 滚动条自动滚动到最底部
- Ubuntu下Python安装了依赖包后仍然找不到包 python setup.py install 解决方案
- 一家独大的亚马逊,让人恐慌?
- count(*),count(1)和count(字段)的区别
- linux服务器操作系统
- Linux命令--vi(编辑或查看文件内容)
- 北京交通大学计算机学院篮球,院际杯篮球赛|土建计算机相会决赛!男篮半决赛战报...
- 理解 K8S 的设计精髓之 List-Watch机制和Informer模块
- 【日常踩坑】使用空字符串ciphertext[i]来赋值报错
- 66W真的比60W充电更快吗?基于Charge pump Charger的快充方案分析
- 北欧计算机专业出国,留学北欧,哪个国家计算机专业比较好?
- 产品定位,什么是产品?什么是产品定位?
- 1. 计算机网络概述
- VS C++学习笔记