matplotlib绘制动画代码示例


Posted in Python onJanuary 02, 2018

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

总结

以上就是本文关于matplotlib绘制动画代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python ElementTree 基本读操作示例
Apr 09 Python
Python实现二分查找与bisect模块详解
Jan 13 Python
Python计算两个日期相差天数的方法示例
May 23 Python
Django csrf 两种方法设置form的实例
Feb 03 Python
Django学习笔记之为Model添加Action
Apr 30 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
Oct 14 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
django实现更改数据库某个字段以及字段段内数据
Mar 31 Python
python中sort sorted reverse reversed函数的区别说明
May 11 Python
如何导出python安装的所有模块名称和版本号到文件中
Jun 05 Python
解析python 中/ 和 % 和 //(地板除)
Jun 28 Python
Python实现滑雪小游戏
Sep 25 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
Jan 02 #Python
Python 实现淘宝秒杀的示例代码
Jan 02 #Python
python基于twisted框架编写简单聊天室
Jan 02 #Python
python http接口自动化脚本详解
Jan 02 #Python
详解用python实现简单的遗传算法
Jan 02 #Python
一个Python最简单的接口自动化框架
Jan 02 #Python
利用Hyperic调用Python实现进程守护
Jan 02 #Python
You might like
PHP静态类
2006/11/25 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
如何通过PHP实现Des加密算法代码实例
2020/05/09 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
Javascript异步表单提交,图片上传,兼容异步模拟ajax技术
2010/05/10 Javascript
Node.js生成HttpStatusCode辅助类发布到npm
2013/04/09 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
jquery实现点击弹出带标题栏的弹出层(从右上角飞入)效果
2015/09/19 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
JavaScript实现点击按钮直接打印
2016/01/06 Javascript
将JSON字符串转换成Map对象的方法
2016/11/30 Javascript
JavaScript实现水平进度条拖拽效果
2017/01/18 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
Vue中在新窗口打开页面及Vue-router的使用
2018/06/13 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
vue实现添加与删除图书功能
2018/10/07 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
JavaScript实现文件下载并重命名代码实例
2019/12/12 Javascript
vue模块移动组件的实现示例
2020/05/20 Javascript
JS箭头函数和常规函数之间的区别实例分析【 5 个区别】
2020/05/27 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
python套接字流重定向实例汇总
2016/03/03 Python
Python 统计字数的思路详解
2018/05/08 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
python爬虫 正则表达式解析
2019/09/28 Python
基于Python 中函数的 收集参数 机制
2019/12/21 Python
Python学习工具jupyter notebook安装及用法解析
2020/10/23 Python
纯CSS3绘制打火机动画火焰效果
2016/07/18 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
保证书范文大全
2014/04/28 职场文书
2014党员学习兰辉先进事迹思想汇报
2014/09/17 职场文书
2015年社会实践个人总结
2015/03/06 职场文书
客户答谢会致辞
2015/07/30 职场文书
Python OpenCV快速入门教程
2021/04/17 Python