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对象绘制动画。

最常用的方法是使用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’
  • 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系列(七):动画相关推荐

  1. Python 数据分析三剑客之 Matplotlib(七):饼状图的绘制

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  2. 计算机动漫与游戏制作与影视,中职中专计算机动漫与游戏制作专业系列教材·动画与影视后期制作:After Effects CS4技能应用教程...

    中职中专计算机动漫与游戏制作专业系列教材·动画与影视后期制作:After Effects CS4技能应用教程 语音 编辑 锁定 讨论 上传视频 <中职中专计算机动漫与游戏制作专业系列教材·动画与 ...

  3. Web前端开发人员和设计师必读文章推荐【系列七】

    这篇文章主要收录了十二月份发布在梦想天空的优秀文章,特别推荐给Web开发人员和设计师阅读.梦天空博客关注前端开发技术,展示最新 HTML5 和 CSS3 技术应用,分享实用的 jQuery 插件,推荐 ...

  4. Docker系列 七. Docker 安装Jenkins

    Docker系列 七. Docker 安装Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集 ...

  5. 深入剖析Redis系列(七) - Redis数据结构之列表

    前言 列表(list)类型是用来存储多个 有序 的 字符串.在 Redis 中,可以对列表的 两端 进行 插入(push)和 弹出(pop)操作,还可以获取 指定范围 的 元素列表.获取 指定索引下标 ...

  6. Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案

    Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案 参考文章: (1)Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案 (2)https://www.cnblogs.com/ ...

  7. 数学之美 系列七 -- 信息论在信息处理中的应用

    数学之美 系列七 -- 信息论在信息处理中的应用 http://googlechinablog.com/2006/05/blog-post_25.html 我们已经介绍了信息熵,它是信息论的基础,我们 ...

  8. 来自极客标签10款最新设计素材-系列七

    为什么80%的码农都做不了架构师?>>>    日期:2013-5-27  来源:GBin1.com 本周我们推荐来自极客标签社区带来的10款免费设计素材,大家可以在这里免费下载你需 ...

  9. SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现

    SQL Server 2008空间数据应用系列七:基于Bing Maps(Silverlight) 的空间数据展现 原文:SQL Server 2008空间数据应用系列七:基于Bing Maps(Si ...

最新文章

  1. Python循环中的变量作用域的灵异现象
  2. VSC为_锐志 VSC 警告灯间歇点亮
  3. C语言中声明和定义的区别
  4. nginx php mysql一些常用命令(windows linux)
  5. linux flush 文件,Linux文件系统学习:io的plug过程-blk_flush_plug_list的情况
  6. 加速前进!华为已在全球多地注册“鸿蒙”商标
  7. js 滚动条自动滚动到最底部
  8. Ubuntu下Python安装了依赖包后仍然找不到包 python setup.py install 解决方案
  9. 一家独大的亚马逊,让人恐慌?
  10. count(*),count(1)和count(字段)的区别
  11. linux服务器操作系统
  12. Linux命令--vi(编辑或查看文件内容)
  13. 北京交通大学计算机学院篮球,院际杯篮球赛|土建计算机相会决赛!男篮半决赛战报...
  14. 理解 K8S 的设计精髓之 List-Watch机制和Informer模块
  15. 【日常踩坑】使用空字符串ciphertext[i]来赋值报错
  16. 66W真的比60W充电更快吗?基于Charge pump Charger的快充方案分析
  17. 北欧计算机专业出国,留学北欧,哪个国家计算机专业比较好?
  18. 产品定位,什么是产品?什么是产品定位?
  19. 1. 计算机网络概述
  20. VS C++学习笔记

热门文章

  1. 大商创小程序源码_小程序直播系统有哪些基本功能
  2. 高中计算机公式,求高中数学公式大全,高二数学公式总结
  3. 解决T100设计器无法更新基础数据的幺蛾子
  4. php dwz,ThinkPHP+DWZ之DWZ自带编辑器图片上传
  5. 广告点击率预测-项目介绍
  6. OTA升级二——阿里云端OTA配置及应用
  7. 凶残的挖矿脚本,奴役我数千机器!
  8. 魔兽世界运营时间线timeLine(2004-2014)
  9. 【imessage苹果推送】苹果相册共享imessgae推
  10. KeePass:强大的开源免费放心的密码管理器