Python学习-使用matplotlib画动态多图

2023-05-16

近期经常使用matplotlib进行数学函数图的绘制,但是如何使用matplotlib绘制动态图,以及绘制动态多图,直到今天才学会。

1.参考文字 

首先感谢几篇文字的作者,帮我学会了如何绘制,大家也可以参考他们的文字。

  1. http://blog.csdn.net/rumswell/article/details/11731003:文字作者给出了数个示例的源码,但是没有很详细的讲解,源码面前无秘密,自己看吧。
  2. http://mytrix.me/2013/08/matplotlib-animation-tutorial/:这位作者的讲解很详细,主要讲了matplotlib官方示例,大家可以参阅。
  3. http://blog.yangyu.me/2014/08/06/matplotlib-graphing-series/:这位作者,给出了不同的示例,而且非常详细,告诉了大家如何一步步学习Matplotlib绘图
  4. http://sebug.net/paper/books/scipydoc/matplotlib_intro.html#id4:用Python做科学计算,很好很详实的书。

2.程序源码

先贴出程序源码,在一步步做解释。

<span style="font-family:SimSun;font-size:10px;">import numpy as np   
from matplotlib import pyplot as plt   
from matplotlib import animation   
  
# first set up the figure, the axis, and the plot element we want to animate   
fig = plt.figure() 
ax1 = fig.add_subplot(2,1,1,xlim=(0, 2), ylim=(-4, 4))
ax2 = fig.add_subplot(2,1,2,xlim=(0, 2), ylim=(-4, 4))
line, = ax1.plot([], [], lw=2)  
line2, = ax2.plot([], [], lw=2)  
def init():  
    line.set_data([], [])  
    line2.set_data([], [])  
    return line,line2

# animation function.  this is called sequentially   
def animate(i):

    x = np.linspace(0, 2, 100)   
    y = np.sin(2 * np.pi * (x - 0.01 * i))  
    line.set_data(x, y)      


    x2 = np.linspace(0, 2, 100)   
    y2 = np.cos(2 * np.pi * (x2 - 0.01 * i))* np.sin(2 * np.pi * (x - 0.01 * i))  
    line2.set_data(x2, y2)   
    return line,line2

anim1=animation.FuncAnimation(fig, animate, init_func=init,  frames=50, interval=10)  
plt.show()  </span>

3.解释

现在就来解释下,这个程序我究竟干了啥

3.1建立子图、空白线

fig = plt.figure() 
ax1 = fig.add_subplot(2,1,1,xlim=(0, 2), ylim=(-4, 4))
ax2 = fig.add_subplot(2,1,2,xlim=(0, 2), ylim=(-4, 4))
line, = ax1.plot([], [], lw=2)  
line2, = ax2.plot([], [], lw=2)  
在上面的程序可以看到,先建立了一个figure对象,之后fig.add_subplot(2,1,1,xlim=(0, 2), ylim=(-4, 4))就是建立子图,关于子图的概念和做法,大家可以参阅下文字【4】“用Python做科学计算” 关于子图的介绍。

3.2创建动画发生时调用的函数

Init()是我们的动画在在创建动画基础框架(base frame)时调用的函数。这里我们们用一个非常简单的对line什么都不做的函数。这个函数一定要返回line对象,这个很重要,因为这样就能告诉动画之后要更新的内容,也就是动作的内容是line。--来自( http://mytrix.me/2013/08/matplotlib-animation-tutorial/
上面的这段话,解释了Init()这个函数是干嘛的,因为我的程序比较特殊,希望能够在一张图中显示两个子图,如图3.1。所以我必须在两个坐标轴ax1和ax2中创建两个空白的线line,line2且在Init()中返回这两个Line。


图3.1

def init():  
    line.set_data([], [])  
    line2.set_data([], [])  
    return line,line2

3.3动画函数

接下来你需要一个动画函数,在这个动画函数中修改你的图,同样的我需要一张图中显示两个东西,所以在动画函数中,我更新了两个图,且返回了line和line2
def animate(i):

    x = np.linspace(0, 2, 100)   
    y = np.sin(2 * np.pi * (x - 0.01 * i))  
    line.set_data(x, y)      


    x2 = np.linspace(0, 2, 100)   
    y2 = np.cos(2 * np.pi * (x2 - 0.01 * i))* np.sin(2 * np.pi * (x - 0.01 * i))  
    line2.set_data(x2, y2)   
    return line,line2

3.4显示动画

最后你需要用如下的两个语句来显示动画,这里有个注意的地方,需要调整interval参数(这个参数指明了时间间隔)的大小,不然会出现如图3.2一样的情况(当你使用了,blit=True这个选项)。
同时http://mytrix.me/2013/08/matplotlib-animation-tutorial/)给我们说明了几个参数的作用,我在不在复述:

这个对象需要持续存在,所有我们要将它赋给一个变量,我们选择了一个100帧的动画(译者注:你上边的代码还是200帧,怎么到这儿就变成100帧了……,另外,这里也不一定一定要是个数字,可以是个generator 或iterable,详见API说明)并且帧与帧之间间隔20ms,blit是一个非常重要的关键字,它告诉动画只重绘修改的部分,结合上面保存的时间, blit=true会使动画显示得会非常非常快。

图3.2

anim1=animation.FuncAnimation(fig, animate, init_func=init,  frames=50, interval=10)  
plt.show()  

3.5结束

上面的工作解释完了,来看看成果。程序写的不好,我也是才初学,希望看到博客的人,能多多给我指教,不胜感激。



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python学习-使用matplotlib画动态多图 的相关文章

  • git 对比两个分支差异

    1 显示出branch1和branch2中差异的部分 git diff branch1 branch2 stat 2 显示指定文件的详细差异 git diff branch1 branch2 具体文件路径 3 显示出所有有差异的文件的详细差
  • 操作系统中cpu如何工作

    扩充小知识 xff1a 这些硬件设备在一条总线上链接 xff0c 他们通过这条线进行数据交互 xff0c 里面的带头大哥就是CPU xff0c 拥有最高指挥权 那么它是如何工作的呢 xff1f A 取指单元 xff08 从内存中取得指令 x
  • dev/mapper的解释

    二 dev mapper目录的解释 为了方便叙述 xff0c 假设一台服务器有三块硬盘分别为a xff0c b xff0c c xff0c 每块硬盘的容量为1T 在安装Linux的时候 xff0c 先根据系统及自身的需要建立基本的分区 xf
  • Centos安装python39(其他版本也是一样的流程)

    Centos安装python39 其他版本也是一样的流程 centos安装python39 其他版本也是一样的流程 1 下载python39 可以去官网下载 xff0c 也可以去华为云下载 华为云 xff1a Index of python
  • centos 中如何启动两个rabbitmq 服务

    启动两个rabbitmq 服务 sudo RABBITMQ NODE PORT 61 5672 RABBITMQ DIST PORT 61 15672 RABBITMQ SERVER START ARGS 61 34 rabbitmq ma
  • 【码农本色】用数据解读我的2014

    转眼2014就过去了 xff0c 不禁感叹又老了一岁的同时 xff0c 却发现已经快研究生毕业了 xff0c 趁着这个活动简单总结下2014 1 实习篇 2014年一月份拿到了人生第一个实习offer xff0c 在sony这样的大公司做a
  • 出现Permission denied (publickey)的解决方法

    ssh root 64 10 240 1 161 报错 1 发现问题 在Linux终端使用ssh root 64 server ip来连接到远程服务器时 xff0c 出现Permission denied publickey 提示 2 分析
  • 23年4月开发语言最新排行榜公布

    随着时代的发展 xff0c 编程语言也在不断演化和发展 xff0c 每一种编程语言都有着其独特的特性和适用场景 在这篇博客中 xff0c 我们将来探讨一下各大编程语言的排行榜 xff0c 以及它们各自的优缺点和应用场景 下面是最新的 Tio
  • CommandNotFoundError: No command ‘conda activate‘

    前言 xff0c 在windows下使用coda 虚拟环境时 xff0c 在激活环境 conda activate env name 时 xff0c 报错找不到 conda activate 的命令 浪费了好久的时间 xff0c 找到了合适
  • Spring、SpringMVC常用注解总结

    一 Spring常用注解 64 Component xff1a 标注一个普通的Spring Bean类 64 Controller xff1a 标注一个控制器组件类 64 Service xff1a 标注一个业务层组件类 64 Reposi
  • 关于Ubuntu fix-broken 的使用

    执行命令 xff1a sudo apt fix broken install sudo apt get update sudo apt get upgrade 运行后可以解决由于依赖包缺失或错误引起的无法通过apt get来安装应用
  • java看书规划

    Java编程思想 大话设计模式 重构 改善既有代码的设计 effective java 深入理解Java虚拟机 Java并发编程实战 深入理解计算机系统 xff0c tcp ip详解 卷一 二 三 xff0c 数据结构与算法 xff08 三
  • 粗读Targeted Supervised Contrastive Learning for Long-Tailed Recognition

    相比于直接对图像进行分类 xff0c 本文更关注特征提取部分 xff0c 通过令提取的不同类特征在超球面上尽可能远离 xff0c 让属于同一类的特征尽可能靠近 xff0c 来提高模型面对样本不平衡时的分类性能 这是本文的方法和效果示意图 第
  • 运行 npm install 报错 command failed npm ERR! command C:\Windows\system32\cmd.exe /d /s /c node build.js

    运行 npm install 报错 command failed npm ERR command C Windows system32 cmd exe d s c node build js nodejs build js 具体看图片 xf
  • e2fsprogs : 预依赖: e2fslibs (= 1.42.13-1ubuntu1) 但是 1.42.13-1ubuntu1.1 正要被安装 E: 有未能满足的依赖关系

    问题 1 E 无法获得锁 var lib dpkg lock open 11 资源暂时不可用 E 无法锁定管理目录 var lib dpkg xff0c 是否有其他进程正占用它 xff1f 2 下列软件包有未满足的依赖关系 xff1a e2
  • 操原上机(二) 模拟实现“生产者-消费者”问题

    实验内容 在 windows 环境下 xff0c 利用高级语言编程环境 xff08 限定为 VS 环境或 VC 环境 xff09 调用 CreateThread 函数和相关的同步函数 xff0c 模拟实现 生产者 消费者 问题 实验过程 首
  • 普通程序员如何入门AI

    毫无疑问 xff0c 人工智能是目前整个互联网领域最火的行业 xff0c 随着AlphaGo战胜世界围棋冠军 xff0c 以及各种无人驾驶 智能家居项目的布道 xff0c 人们已经意识到了AI就是下一个风口 当然 xff0c 程序员是我见过
  • Arch Linux 安装简明流程

    Arch Linux 安装简明流程 这是一篇为 GPT EFI 引导 的电脑安装 Arch Linux xff08 双系统 xff09 的中文简明流程 xff0c 尽可能省略了可以省略的流程与文字以使得篇幅尽量短小 xff0c 基本上基于
  • python 数据文件上传到ftp服务器

    场景 xff1a 客户的某数据文件需要定时推送到一个第三方平台的ftp服务器上 xff0c 第三方平台会对上传过来的数据文件进行解析 一 通过FTP将文件上传到服务器 xff0c 需要满足以下几个条件 xff1a 本服务器和ftp服务器是联
  • 基于web系统的一个小型简单管理系统

    系统简介 本系统提供给暮云办公室的工作人员使用 权限包含 xff1a 检索信息 更新信息 删除信息技术路线 1 前端 xff1a html 43 ccs 43 js 采用框架 xff1a jquery 43 bootstrap 2 后端 x

随机推荐

  • 修改 Ubuntu 系统用户名和登录名

    在终端中 xff0c 命令行前面的字符串格式为用户名 64 主机名 路径 若要将老用户名user改为新用户名robot xff0c 请按照下面的顺序修改 xff08 0步骤可以跳过 xff09 xff1a 修改主机名 xff08 如果需要的
  • BT下载磁力下载工具,这几款,不限速

    想看个电影 xff0c 迅雷限速 xff0c 经常还因为某些原因下不了 xff0c 下载电影 xff0c BT下载工具总少不了 xff0c 今天给大家推荐这几款BT下载磁力链接下载工具 不限速下载 xff0c 超爽 xff01 一 Motr
  • ubuntu22.04桌面图标不显示的可能情况之一

    我自己的ubuntu突然不显示桌面图标了 xff0c 但文件管理器可以看到desktop目录下其实有文件的 xff0c 在网上找了很多方法也无济于事 xff0c 最后无意中点了下gnome插件里的一个选项 xff0c 问题就解决了 xff0
  • QT开发笔记(Serial Port )

    Serial Port Qt 提供了串口类 xff0c 可以直接对串口访问 我们可以直接使用 Qt 的串口类编程即可 xff0c 十分 方便 Qt 串口类不仅在 Windows 能用 xff0c 还能在 Linux 下用 xff0c 虽然串
  • ubuntu14.04版本下在目录下快捷打开终端

    在Ubuntu 14中 xff0c 您可以通过Nautilus文件管理器的右键菜单来快速打开终端窗口 xff0c 而无需切换到终端模式 具体的操作步骤如下 xff1a 打开Nautilus文件管理器 xff0c 并进入要打开终端窗口的目录
  • SQL SERVER添加注释的快捷键

    SQL SERVER添加注释 添加注释删除注释 添加注释 Ctrl 43 K xff0c C xff08 按住Ctrl xff0c 然后按K xff0c 接着按C xff09 删除注释 Ctrl 43 K xff0c U xff08 按住C
  • 多线程经典题目

    多线程编程 目录 文章目录 多线程编程目录work1work2work3work4work5work6work7work8锁的实现线程间同步唤醒 阻塞交替打印方式相关blogLambda原子类型理论锁模型Java锁底层实现 work1 sp
  • 抖音短视频脚本制作的一些技巧,快快收藏起来!

    在抖音上发布一个成功的短视频需要多方面的考虑 xff0c 其中最重要的是脚本的制作 一个好的脚本不仅可以吸引用户观看 xff0c 还可以让用户产生共鸣 xff0c 从而提高视频的传播效果 以下是不若与众科技一些关于抖音短视频脚本制作的技巧
  • java中http请求带cookie

    span class hljs built in String span urlPath 61 span class hljs string 34 你的请求链接 34 span span class hljs built in String
  • Linux系统下使用rpm安装时失败 出现错误:“依赖检测失败” 解决方法

    今天长青在重新安装yum的时候出现了这种错误 xff0c 提示 依赖检测失败 解决方法 xff1a 在命令末尾加上 nodeps force 参数意思 xff1a nodeps xff1a 不检测依赖关系 force xff1a 强制安装
  • springboot的sql日志打印与AOP实现接口调用日志打印

    Springboot的sql日志打印与AOP实现接口调用日志打印 96 1 Springboot与mybatis或者mybatisplus 打印sql执行语句 使用的是springboot中内部嵌入的日志框架 2 接口调用日志 xff0c
  • 双一流博士整理的71个OpenCV实战项目教程开放下载!

    点击上方 小白学视觉 xff0c 选择加 34 星标 34 或 置顶 重磅干货 xff0c 第一时间送达 近期小白学视觉公众号推出了多篇Python 43 OpenCV实战项目的文章 xff0c 深受小伙伴们的喜爱 最近有小伙伴推荐 xff
  • 资料分析之增长量

    一 增长量的计算 识别 xff1a 增长 43 单位 公式 xff1a 1 给出现期 基期 xff1a 增长量 61 现期 基期 2 给出现期 增长率 xff1a 增长量 61 r 现期 1 43 r 速算 xff1a 1 尾数法法 xff
  • Manjaro 基础配置及常用软件安装

    更新源 获取key https mirrors tuna tsinghua edu cn help archlinux https mirrors tuna tsinghua edu cn help archlinuxcn 安装常用工具 x
  • JS中new Date().format("YYYY-mm-dd")提示format is not a function的解决办法

    format方法已经被移除了 xff0c 赶快换个组件 xff01 如果是个懒人 xff0c 就不要再看那些自己写方法大神给的函数了 xff01 xff01 用moment xff0c npm一下子就能装好 xff0c 很好用 xff01
  • python去掉字符串中的指定字符的方法

    我们在使用 Python处理字符串的时候 xff0c 经常会遇到一些字符串中出现了指定字符 xff0c 比如以下代码 xff1a 上面代码中的 就是一个指定字符 xff0c 在 python中 xff0c 如果使用 替换为指定字符 xff0
  • linux使用yum安装JDK8

    安装步骤 xff1a 1 查看是否已安装JDK yum list installed span class token operator span grep java 2 卸载CentOS系统Java环境 yum span class to
  • 图像的边缘检测和缺失修复(附matlab代码)

    最近在数学建模过程中老师给了个图片分别在清晰 有噪声及模糊状态下对其进行边缘检测的题目 xff0c 最后一题是将图片中一部分抠出后将图片按照剩余图片的特征进行修复 xff0c 整个问题涉及到人工智能及计算机视觉的领域较多 xff0c 和队友
  • FileNotFoundError:[Errno 2] No such file or directory :

    FileNotFoundError Errno 2 No such file or directory 1 根本原因 xff1a 路径有问题 2 可能的原因 xff1a 1 xff09 注意Windows与Linux分隔符的区别 Windo
  • Python学习-使用matplotlib画动态多图

    近期经常使用matplotlib进行数学函数图的绘制 xff0c 但是如何使用matplotlib绘制动态图 xff0c 以及绘制动态多图 xff0c 直到今天才学会 1 参考文字 首先感谢几篇文字的作者 xff0c 帮我学会了如何绘制 x