Python使用matplotlib绘制动画的方法


Posted in Python onMay 20, 2015

本文实例讲述了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程序设计有所帮助。

Python 相关文章推荐
python遍历数组的方法小结
Apr 30 Python
Python按行读取文件的简单实现方法
Jun 22 Python
Python中不同进制的语法及转换方法分析
Jul 27 Python
python实现简易云音乐播放器
Jan 04 Python
Python实现的质因式分解算法示例
May 03 Python
创建Django项目图文实例详解
Jun 06 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
解决Tensorflow占用GPU显存问题
Feb 03 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
python实现KNN近邻算法
Dec 30 Python
matplotlib之属性组合包(cycler)的使用
Feb 24 Python
python 如何在list中找Topk的数值和索引
May 20 Python
Python中subprocess模块用法实例详解
May 20 #Python
python检测某个变量是否有定义的方法
May 20 #Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
May 20 #Python
python使用PyGame模块播放声音的方法
May 20 #Python
python实现带声音的摩斯码翻译实现方法
May 20 #Python
python定时检查某个进程是否已经关闭的方法
May 20 #Python
Python操作列表之List.insert()方法的使用
May 20 #Python
You might like
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
PHP中防止直接访问或查看或下载config.php文件的方法
2012/07/07 PHP
三个类概括PHP的五种设计模式
2012/09/05 PHP
浅析PHP中的闭包和匿名函数
2017/12/25 PHP
基于PHP的微信公众号的开发流程详解
2020/08/07 PHP
JavaScript的Function详细
2006/11/14 Javascript
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
JS解析XML的实现代码
2009/11/12 Javascript
关于juqery radio写法的兼容性问题(新老版本jquery)
2010/06/14 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
2011/10/16 Javascript
javascript学习笔记(三) String 字符串类型介绍
2012/06/19 Javascript
javascript中caller和callee详解
2015/08/10 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
js中json对象和字符串的理解及相互转化操作实现方法
2017/09/22 Javascript
JQuery扩展对象方法操作示例
2018/08/21 jQuery
解决vue axios的封装 请求状态的错误提示问题
2018/09/25 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
Vue实现跑马灯效果
2020/05/25 Javascript
vue实现图片裁剪后上传
2020/12/16 Vue.js
Python运行的17个时新手常见错误小结
2012/08/07 Python
基于numpy.random.randn()与rand()的区别详解
2018/04/17 Python
Django 根据数据模型models创建数据表的实例
2018/05/27 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
python使用tcp实现局域网内文件传输
2020/03/20 Python
Django分页查询并返回jsons数据(中文乱码解决方法)
2018/08/02 Python
python可视化实现代码
2019/01/15 Python
对Python 检查文件名是否规范的实例详解
2019/06/10 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
Tessabit美国:集世界奢侈品和设计师品牌的意大利精品买手店
2020/06/29 全球购物
大学生社会实践自我鉴定
2014/03/24 职场文书
市级青年文明号申报材料
2014/05/26 职场文书
社团活动总结报告
2014/06/27 职场文书
学习十八大的心得体会
2014/09/12 职场文书
企业安全生产检查制度
2015/08/06 职场文书
Python实现随机生成迷宫并自动寻路
2021/06/13 Python