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 Trie树实现字典排序
Mar 28 Python
用Python登录Gmail并发送Gmail邮件的教程
Apr 17 Python
编写Python脚本抓取网络小说来制作自己的阅读器
Aug 20 Python
Python中__init__.py文件的作用详解
Sep 18 Python
Python实现的根据文件名查找数据文件功能示例
May 02 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
python语言元素知识点详解
May 15 Python
Python Lambda函数使用总结详解
Dec 11 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
Jan 18 Python
Pyinstaller 打包发布经验总结
Jun 02 Python
linux中nohup和后台运行进程查看及终止
Jun 24 Python
Python创建SQL数据库流程逐步讲解
Sep 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版微信公众平台回复中文出现乱码问题的解决方法
2016/09/22 PHP
PHP实现的多维数组排序算法分析
2018/02/10 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
浅谈利用JavaScript进行的DDoS攻击原理与防御
2015/06/04 Javascript
手机端js和html5刮刮卡效果
2020/09/29 Javascript
jquery,js简单实现类似Angular.js双向绑定
2017/01/13 Javascript
利用SpringMVC过滤器解决vue跨域请求的问题
2018/02/10 Javascript
详解webpack 入门与解析
2018/04/09 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
JavaScript创建表格的方法
2020/04/13 Javascript
Python迭代器和生成器定义与用法示例
2018/02/10 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
使用PyInstaller将python转成可执行文件exe笔记
2018/05/26 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
python通过robert、sobel、Laplace算子实现图像边缘提取详解
2019/08/21 Python
Django在Model保存前记录日志实例
2020/05/14 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
学校岗位设置方案
2014/01/16 职场文书
小学教师师德感言
2014/02/10 职场文书
文化宣传方案
2014/03/13 职场文书
爱情寄语大全
2014/04/09 职场文书
导师推荐信范文
2014/05/09 职场文书
银行求职信范文
2014/05/26 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
2014年教务处工作总结
2014/12/03 职场文书
陕西导游词
2015/02/04 职场文书
月考总结与反思
2015/10/22 职场文书