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通过urllib2爬网页上种子下载示例
Feb 24 Python
Python内建数据结构详解
Feb 03 Python
实例讲解Python编程中@property装饰器的用法
Jun 20 Python
Python中运算符&quot;==&quot;和&quot;is&quot;的详解
Oct 08 Python
python: 判断tuple、list、dict是否为空的方法
Oct 22 Python
pygame游戏之旅 添加游戏界面按键图形
Nov 20 Python
python查找重复图片并删除(图片去重)
Jul 16 Python
使用Python来做一个屏幕录制工具的操作代码
Jan 18 Python
Python异常原理及异常捕捉实现过程解析
Mar 25 Python
python中查看.db文件中表格的名字及表格中的字段操作
Jul 07 Python
详解python3 GUI刷屏器(附源码)
Feb 18 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
Jun 23 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版快速排序、冒泡排序
2014/04/09 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
php 读取文件夹下所有图片、文件的实例
2018/10/17 PHP
php面试中关于面向对象的相关问题
2019/02/13 PHP
jquery 模拟类搜索框自动完成搜索提示功能(改进)
2010/05/24 Javascript
JavaScript中链式调用之研习
2011/04/07 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
基于jQuery和CSS3制作响应式水平时间轴附源码下载
2015/12/20 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
老生常谈js数据类型
2017/08/03 Javascript
Angular 4根据组件名称动态创建出组件的方法教程
2017/11/01 Javascript
微信小程序实现导航栏选项卡效果
2020/06/19 Javascript
nodeJS进程管理器pm2的使用
2019/01/09 NodeJs
vue语法自动转typescript(解放双手)
2019/09/18 Javascript
JavaScript实现省市联动效果
2019/11/22 Javascript
[57:18]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#3VP VS VG
2016/03/03 DOTA
二种python发送邮件实例讲解(python发邮件附件可以使用email模块实现)
2013/12/03 Python
python之yield表达式学习
2014/09/02 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
2017/12/28 Python
Python实现带参数与不带参数的多重继承示例
2018/01/30 Python
python的concat等多种用法详解
2018/11/28 Python
Python中一些深不见底的“坑”
2019/06/12 Python
使用python实现滑动验证码功能
2019/08/05 Python
Python调用飞书发送消息的示例
2020/11/10 Python
HTML5在手机端实现视频全屏展示方法
2020/11/23 HTML / CSS
世界上最受欢迎的钓鱼诱饵:Rapala
2019/05/02 全球购物
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
机电一体化职业规划书
2014/01/07 职场文书
公司请假条格式
2014/04/11 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python