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 相关文章推荐
Django1.3添加app提示模块不存在的解决方法
Aug 26 Python
python基于socket实现网络广播的方法
Apr 29 Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 Python
利用Python2下载单张图片与爬取网页图片实例代码
Dec 25 Python
python使用pdfminer解析pdf文件的方法示例
Dec 20 Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 Python
Django中在xadmin中集成DjangoUeditor过程详解
Jul 24 Python
Django使用Channels实现WebSocket的方法
Jul 28 Python
Python 从subprocess运行的子进程中实时获取输出的例子
Aug 14 Python
python机器学习实现决策树
Nov 11 Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 Python
详解python os.path.exists判断文件或文件夹是否存在
Nov 16 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实现首页链接查询 友情链接检查的代码
2010/01/05 PHP
php数组去重实例及分析
2013/11/26 PHP
php模拟post提交数据的方法
2015/02/12 PHP
Jsonp 跨域的原理以及Jquery的解决方案
2010/05/18 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
JQuery实现倒计时按钮的实现代码
2012/03/23 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
JavaScript中的console.group()函数详细介绍
2014/12/29 Javascript
JavaScript的Polymer框架中dom-repeat与VM的相关操作
2015/07/29 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
超漂亮的jQuery图片轮播特效
2015/11/24 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
js实现input密码框提示信息的方法(附html5实现方法)
2016/01/14 Javascript
全面解析Bootstrap中nav、collapse的使用方法
2016/05/22 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
vue2实现移动端上传、预览、压缩图片解决拍照旋转问题
2017/04/13 Javascript
如何理解Vue的作用域插槽的实现原理
2017/08/19 Javascript
Cpage.js给组件绑定事件的实现代码
2017/08/31 Javascript
jquery实现限制textarea输入字数的方法
2017/09/06 jQuery
在vue中获取token,并将token写进header的方法
2018/09/26 Javascript
Vue按时间段查询数据组件使用详解
2020/08/21 Javascript
javascript贪吃蛇游戏设计与实现
2020/09/17 Javascript
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
python基于Tkinter库实现简单文本编辑器实例
2015/05/05 Python
Python Selenium 之关闭窗口close与quit的方法
2019/02/13 Python
python 从list中随机取值的方法
2020/11/16 Python
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
Giglio俄罗斯奢侈品购物网:男士、女士、儿童高级时装
2018/07/27 全球购物
电子信息专业学生自荐信
2013/11/09 职场文书
工程资料员岗位职责
2014/03/10 职场文书
党的群众路线教育实践活动对照检查材料思想汇报
2014/09/19 职场文书
驾驶员管理制度范本
2015/08/06 职场文书
Python中Cookies导出某站用户数据的方法
2021/05/17 Python
spring cloud 配置中心native配置方式
2021/09/25 Java/Android
Golang中channel的原理解读(推荐)
2021/10/16 Golang