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采用getopt解析命令行输入参数实例
Sep 30 Python
python通过pil将图片转换成黑白效果的方法
Mar 16 Python
对pandas的层次索引与取值的新方法详解
Nov 06 Python
Python 存储字符串时节省空间的方法
Apr 23 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
pandas分区间,算频率的实例
Jul 04 Python
python re.sub()替换正则的匹配内容方法
Jul 22 Python
Python如何使用PIL Image制作GIF图片
May 16 Python
浅谈django框架集成swagger以及自定义参数问题
Jul 07 Python
Python使用openpyxl复制整张sheet
Mar 24 Python
超详细Python解释器新手安装教程
May 10 Python
还在手动盖楼抽奖?教你用Python实现自动评论盖楼抽奖(一)
Jun 07 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中ob_get_length缓冲与获取缓冲长度实例
2014/11/20 PHP
PHP编写daemon process详解及实例代码
2016/09/30 PHP
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
JS不能跨域借助jquery获取IP地址的方法
2014/08/20 Javascript
TinyMCE提交AjaxForm获取不到数据的解决方法
2015/03/05 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
微信小程序 wxapp画布 canvas详细介绍
2016/10/31 Javascript
jQuery Mobile漏洞会有跨站脚本攻击风险
2017/02/12 Javascript
vue2.0实战之基础入门(1)
2017/03/27 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
实例分析vue循环列表动态数据的处理方法
2018/09/28 Javascript
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
使用 Vue 实现一个虚拟列表的方法
2019/08/20 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
[00:53]2015国际邀请赛 中国区预选赛一触即发
2015/05/14 DOTA
python搭建简易服务器分析与实现
2012/12/15 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
用python编写第一个IDA插件的实例
2018/05/29 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
Python+Selenium使用Page Object实现页面自动化测试
2019/07/14 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Python通过zookeeper实现分布式服务代码解析
2020/07/22 Python
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
宏碁西班牙官网:Acer西班牙
2021/01/08 全球购物
期终自我鉴定
2014/02/17 职场文书
英文自荐信常用句子
2014/03/26 职场文书
《特殊的葬礼》教学反思
2014/04/27 职场文书
师范生求职信
2014/06/14 职场文书
教师党员个人整改措施材料
2014/09/16 职场文书
Appium中scroll和drag_and_drop根据元素位置滑动
2022/02/15 Python
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫