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中find()方法的使用
May 18 Python
使用python3.5仿微软记事本notepad
Jun 15 Python
Python实现多并发访问网站功能示例
Jun 19 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
Jul 24 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
Python堆排序原理与实现方法详解
May 11 Python
Python中正则表达式的用法总结
Feb 22 Python
python用for循环求和的方法总结
Jul 08 Python
python爬虫 基于requests模块的get请求实现详解
Aug 20 Python
Python中的四种交换数值的方法解析
Nov 18 Python
Python Des加密解密如何实现软件注册码机器码
Jan 08 Python
Python实现井字棋小游戏
Mar 09 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
风格模板初级不完全修改教程
2006/10/09 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
jQuery使用fadein方法实现渐出效果实例
2015/03/27 Javascript
Javascript编写俄罗斯方块思路及实例
2015/07/07 Javascript
jQuery点击输入框显示验证码图片
2016/05/19 Javascript
jQuery实现简洁的轮播图效果实例
2016/09/07 Javascript
jQuery动态创建元素以及追加节点的实现方法
2016/10/20 Javascript
微信开发 js实现tabs选项卡效果
2016/10/28 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
详解react使用react-bootstrap当轮子造车
2017/08/15 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
js实现上传按钮并显示缩略图小轮子
2020/05/04 Javascript
Python getopt模块处理命令行选项实例
2014/05/13 Python
Python中非常实用的一些功能和函数分享
2015/02/14 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
python 内置模块详解
2019/01/01 Python
python获取微信企业号打卡数据并生成windows计划任务
2019/04/30 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
Django对models里的objects的使用详解
2019/08/17 Python
Python从文件中读取指定的行以及在文件指定位置写入
2019/09/06 Python
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
销售人员自我评价怎么写
2013/09/19 职场文书
实习鉴定范文
2013/12/19 职场文书
大三学生入党思想汇报
2014/01/02 职场文书
施工工地安全标语
2014/06/07 职场文书
2016预备党员培训心得体会
2016/01/08 职场文书
情况说明书格式及范文
2019/06/24 职场文书
jQuery实现影院选座订座效果
2021/04/13 jQuery
Windows server 2012 NTP时间同步的实现
2022/06/25 Servers
Spring Boot优化后启动速度快到飞起技巧示例
2022/07/23 Java/Android