python绘制动画示例_Python使用matplotlib绘制动画的方法

本文实例讲述了Python使用matplotlib绘制动画的方法。分享给大家供大家参考。具体分析如下:

matplotlib从1.1.0版本以后就开始支持绘制动画

下面是几个的示例:

第一个例子使用generator,每隔两秒,就运行函数data_gen:

# -*- coding: utf-8 -*-

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.animation as animation

fig = plt.figure()

axes1 = fig.add_subplot(111)

line, = axes1.plot(np.random.rand(10))

#因为update的参数是调用函数data_gen,

#所以第一个默认参数不能是framenum

def update(data):

line.set_ydata(data)

return line,

# 每次生成10个随机数据

def data_gen():

while True:

yield np.random.rand(10)

ani = animation.FuncAnimation(fig, update, data_gen, interval=2*1000)

plt.show()

第二个例子使用list(metric),每次从metric中取一行数据作为参数送入update中:

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.animation as animation

start = [1, 0.18, 0.63, 0.29, 0.03, 0.24, 0.86, 0.07, 0.58, 0]

metric =[[0.03, 0.86, 0.65, 0.34, 0.34, 0.02, 0.22, 0.74, 0.66, 0.65],

[0.43, 0.18, 0.63, 0.29, 0.03, 0.24, 0.86, 0.07, 0.58, 0.55],

[0.66, 0.75, 0.01, 0.94, 0.72, 0.77, 0.20, 0.66, 0.81, 0.52]

]

fig = plt.figure()

window = fig.add_subplot(111)

line, = window.plot(start)

#如果是参数是list,则默认每次取list中的一个元素,

#即metric[0],metric[1],...

def update(data):

line.set_ydata(data)

return line,

ani = animation.FuncAnimation(fig, update, metric, interval=2*1000)

plt.show()

第三个例子:

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()

ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))

line, = ax.plot([], [], lw=2)

# initialization function: plot the background of each frame

def init():

line.set_data([], [])

return line,

# animation function. This is called sequentially

# note: i is framenumber

def animate(i):

x = np.linspace(0, 2, 1000)

y = np.sin(2 * np.pi * (x - 0.01 * i))

line.set_data(x, y)

return line,

# call the animator. blit=True means only re-draw the parts that have changed.

anim = animation.FuncAnimation(fig, animate, init_func=init,

frames=200, interval=20, blit=True)

#anim.save('basic_animation.mp4', fps=30, extra_args=['-vcodec', 'libx264'])

plt.show()

第四个例子:

# -*- coding: utf-8 -*-

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.animation as animation

# 每次产生一个新的坐标点

def data_gen():

t = data_gen.t

cnt = 0

while cnt < 1000:

cnt+=1

t += 0.05

yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)

data_gen.t = 0

# 绘图

fig, ax = plt.subplots()

line, = ax.plot([], [], lw=2)

ax.set_ylim(-1.1, 1.1)

ax.set_xlim(0, 5)

ax.grid()

xdata, ydata = [], []

# 因为run的参数是调用函数data_gen,

# 所以第一个参数可以不是framenum:设置line的数据,返回line

def run(data):

# update the data

t,y = data

xdata.append(t)

ydata.append(y)

xmin, xmax = ax.get_xlim()

if t >= xmax:

ax.set_xlim(xmin, 2*xmax)

ax.figure.canvas.draw()

line.set_data(xdata, ydata)

return line,

# 每隔10秒调用函数run,run的参数为函数data_gen,

# 表示图形只更新需要绘制的元素

ani = animation.FuncAnimation(fig, run, data_gen, blit=True, interval=10,

repeat=False)

plt.show()

再看下面的例子:

# -*- coding: utf-8 -*-

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.animation as animation

#第一个参数必须为framenum

def update_line(num, data, line):

line.set_data(data[...,:num])

return line,

fig1 = plt.figure()

data = np.random.rand(2, 15)

l, = plt.plot([], [], 'r-')

plt.xlim(0, 1)

plt.ylim(0, 1)

plt.xlabel('x')

plt.title('test')

#framenum从1增加大25后,返回再次从1增加到25,再返回...

line_ani = animation.FuncAnimation(fig1, update_line, 25,fargs=(data, l),interval=50, blit=True)

#等同于

#line_ani = animation.FuncAnimation(fig1, update_line, frames=25,fargs=(data, l),

# interval=50, blit=True)

#忽略frames参数,framenum会从1一直增加下去知道无穷

#由于frame达到25以后,数据不再改变,所以你会发现到达25以后图形不再变化了

#line_ani = animation.FuncAnimation(fig1, update_line, fargs=(data, l),

# interval=50, blit=True)

plt.show()

希望本文所述对大家的python程序设计有所帮助。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/335134.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机步进电机ppt答辩_基于MCU和DSP的步进电机控制技术分析

来源 | 控制与传动步进电机已经渗透入我们生活的方方面面&#xff0c;本文介绍了一些重要的步进电机相关技术&#xff0c;为开发人员基本了解步进电机的工作原理提供了足够的信息&#xff0c;同时也介绍了用微控制器或数字信号处理器控制步进电机的方法。步进电机也叫步进器&am…

拼图登陆拼图二维码验证_另一个拼图观点

拼图登陆拼图二维码验证在过去的几周中&#xff0c;围绕Java 9即将发布及其最著名的功能&#xff1a;Java平台模块系统JPMS进行了激烈的辩论。 –以其项目名称Jigsaw更为人所知。 模块系统以正式规范过程的形式引入Java生态系统 – JSR –需要由专家组以最终形式批准。 在该专…

【C++】多线程(四)

这是多线程的最后一篇文章。 std::promise promise 的作用很简单&#xff0c;在一个线程t1中保存一个类型typename T的值&#xff0c;可供相绑定的std::future对象在另一线程t2中获取。事实上&#xff0c;它与future基本是成对出现的。来看下面的例子&#xff1a; //声明一个…

广告设计师如何使用python_设计师必看!高效率工具,30分钟完成别人一天的工作!...

原标题&#xff1a;设计师必看&#xff01;高效率工具&#xff0c;30分钟完成别人一天的工作&#xff01;世界上只有两种物质&#xff1a;高效率和低效率&#xff1b;世界上只有两种人&#xff1a;高效率的人和低效率的人。—— 萧伯纳今天这篇文章主要想和大家分享一个效率工具…

Linux/MacOS/Mac OS 命令终端/命令行如何查找文件/搜索文件和删除文件

文章目录问题一&#xff1a;我要在当前目录下查找名称中含有“Lib”的文件和目录&#xff0c;注意不要在子目录下查找问题二&#xff1a;在当前目录下如何删除名称中含有“abc”的文件和文件夹问题一&#xff1a;我要在当前目录下查找名称中含有“Lib”的文件和目录&#xff0c…

div获取第一个子节点jquery_【antd】Tree组件子节点不完全勾选获取父节点的值

注意⚠️&#xff1a;这篇文章适用于后台返回的树结构比较多的情况下&#xff0c;如果数据比较少的情况下&#xff0c;可以参考我的上一篇文章&#xff0c;操作起来比较简单我们在实际操作tree组件和后台交互的时候一般都是需要将父节点传过去&#xff0c;如图&#xff1a;点击…

java中的jpa_在JPA中处理Java的LocalDateTime

java中的jpa几天前&#xff0c;我在处理JPA中的LocalDateTime属性时遇到问题。 在这篇博客文章中&#xff0c;我将尝试创建一个样本问题来说明该问题以及我使用的解决方案。 考虑以下实体&#xff0c;该实体为特定公司的员工建模– Entity Getter Setter public class Employ…

修改value_Python | 快速修改或命名N个文件夹名称,你会吗?

#欢迎交流&#xff1a;shuilinggan163.com#工作中&#xff0c;经常会遇到需要修改或新建很多文件的文件命&#xff0c;是一件重复且头疼的事情&#xff0c;下面一组Python代码&#xff0c;轻松教你快速实现&#xff01;程序一&#xff1a;根据文件(SSSSSS)新建并命名空文件夹im…

linux离线安装python3.7教程_Linux傻瓜式七步完美安装Python3.7

1 安装依赖包yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel gcc2 下载解压Python3.7# 1 首先切换到桌面cd /home# 2 下载wget http://www.python.org/f…

IntelliJ IDEA for Mac在MacOS模式下打开系统设置(偏好设置)的快捷键(Preferences Shortcut)

快捷键快捷键符号英文名称功能说明Command ,⌘,Open Settings dialog打开IDEA系统设置

gwt格式_GWT HTTP请求替代方案

gwt格式由于多种原因 &#xff0c;许多GWT用户放弃了RPC机制&#xff0c;这是GWT提供的调用后端的标准方法。 他们发现&#xff0c;在GWT RequestBuilder与其他可能不适合其应用程序模型的外部库之间迷失了自己。 这篇文章的目的是要通过GWT中众所周知的HTTP / Rest库来尝试使情…

簇的局部变量中布尔类型_java基础2(变量、常量、数据类型)

一、注释&#xff08;1&#xff09;什么是注释&#xff1f;解释说明的文字&#xff08;注释的内容不会被编译&#xff09;&#xff08;2&#xff09;注释的作用①对代码的解释说明 ②便于后期维护&#xff08;3&#xff09;注释的分类:①单行注释 //单行注释作用域:只在当前行有…

python生成海报_生成海报(前端 | python)

我最近没有摸鱼&#xff0c;一直都在工作。只不过目前需要爬一点数据 python 做的&#xff0c;之后看机会分享一下。忙着忙着老大说要生成海报&#xff0c;有个活动要给每个用户来个分享图。想法PS 批处理&#xff1f;脚本&#xff1f; 能甩出去的活都甩出去&#xff0c;机智如…

数位进制转换详解

文章目录进制进制转换二进制和十进制互相转换十进制 → 二进制十进制正整数 → 二进制十进制负整数 → 二进制十进制负小数 → 二进制十进制小数 → 二进制二进制 → 十进制二进制负整数 → 十进制二进制的正整数 → 十进制二进制小数 → 十进制二进制的负小数 → 十进制八进制…

java agent_如何脚踏实地构建Java Agent

java agent在构建Plumbr的多年中&#xff0c;我们遇到了许多具有挑战性的问题。 在其他方面&#xff0c;使Plumbr Java Agent可靠地执行而不会危及客户的应用程序&#xff0c;是一个特别棘手的问题。 从实时系统中安全地收集所有需要的遥测会带来很多问题。 其中一些非常简单&a…

python中链表和数组_数据结构笔记(一):数组、链表|python基础教程|python入门|python教程...

https://www.xin3721.com/eschool/pythonxin3721/(一)数组数组(Array)是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。1、数组支持随机访问&#xff0c;根据下标随机访问的时间复杂度为 O(1)。通过 a[i]_address a[0]_address i*元…

旋转散点图_聚类分析的结果如何用散点图展示出来?

SPSS系统聚类输出的树状图广受用户喜爱&#xff0c;二阶聚类也可以输出一系列美观的可视化图形用来观察聚类效果&#xff0c;但我们发现Kmeans均值聚类没有提供可视化程度高的图形&#xff0c;那怎么办&#xff0c;我们自己来制作。数据小兵推荐使用3D散点图全方位观察K均值聚类…

async 打包异常_重新打包流中的异常

async 打包异常Java 8已有两年历史&#xff0c;但是仍然存在社区尚未为其开发好的解决方案库的用例&#xff0c;甚至边缘用例。 如何处理流管道中的检查异常就是这样一个问题。 Stream操作接受的功能接口不允许实现抛出已检查的异常&#xff0c;但是我们可能要调用许多方法。 显…

补码基础

关于补码&#xff0c;有如下比较有趣的演化过程: 假如计算机中使用 4 位的二进制表示数据&#xff0c;如图-2&#xff0c;最多能表示 0 到 15(10 进制)&#xff0c;之后有牛人做了 一个细微改动&#xff0c;如图-3&#xff0c;将所有二进制以 1 开头的数(大于 7 的数)放到 0 之…

身份验证错误错误指定的句柄无效_基于 Web 端的人脸识别身份验证「实践」

作者&#xff1a;沫沫 政采云前端团队转发链接&#xff1a;https://mp.weixin.qq.com/s/fRDpXixnLIy9c0Uh2tMezQ前言近些年来&#xff0c;随着生物识别技术的逐渐成熟&#xff0c;基于深度学习的人脸识别技术取得了突破性进展&#xff0c;准确率显著提高。现阶段&#xff0c;人…