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将图片文件转换成base64编码的方法
Mar 14 Python
一步步解析Python斗牛游戏的概率
Feb 12 Python
python利用socketserver实现并发套接字功能
Jan 26 Python
python如何派生内置不可变类型并修改实例化行为
Mar 21 Python
Python实现高斯函数的三维显示方法
Dec 29 Python
对python模块中多个类的用法详解
Jan 10 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
Python嵌套函数,作用域与偏函数用法实例分析
Dec 26 Python
详解Python中的分支和循环结构
Feb 11 Python
tensorboard显示空白的解决
Feb 15 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
Python urllib request模块发送请求实现过程解析
Dec 10 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
CI框架Session.php源码分析
2014/11/03 PHP
Yii中的relations数据关联查询及统计功能用法详解
2016/07/14 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
javascript函数库-集合框架
2007/04/27 Javascript
jQuery :first选择器使用介绍
2013/08/09 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
jQuery根据元素值删除数组元素的方法
2015/06/24 Javascript
js+canvas绘制五角星的方法
2016/01/28 Javascript
详解JavaScript中数组和字符串的lastIndexOf()方法使用
2016/03/13 Javascript
全面了解js中的script标签
2016/07/04 Javascript
js 中获取制定的cook信息实现方法
2016/11/19 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
js实现功能比较全面的全选和多选
2017/03/02 Javascript
ES6正则表达式扩展笔记
2017/07/25 Javascript
webpack将js打包后的map文件详解
2018/02/22 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
wxPython之解决闪烁的问题
2018/01/15 Python
Python实战购物车项目的实现参考
2019/02/20 Python
Python-Flask:动态创建表的示例详解
2019/11/22 Python
pytorch实现用CNN和LSTM对文本进行分类方式
2020/01/08 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
html5的新玩法——语音搜索
2013/01/03 HTML / CSS
美国购买体育赛事门票网站:TicketCity
2019/03/06 全球购物
C#实现启动一个进程
2016/10/01 面试题
妇女工作先进事迹
2014/08/17 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
2015年预算员工作总结
2015/05/14 职场文书
素质拓展训练感想
2015/08/07 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
Python函数中apply、map、applymap的区别
2021/11/27 Python
利用Java连接Hadoop进行编程
2022/06/28 Java/Android
redis lua限流算法实现示例
2022/07/15 Redis