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 从远程服务器下载日志文件的程序
Feb 10 Python
python+mysql实现简单的web程序
Sep 11 Python
python实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
Python计算已经过去多少个周末的方法
Jul 25 Python
Python解析json文件相关知识学习
Mar 01 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
PyQt5每天必学之单行文本框
Apr 19 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
Django使用Celery加redis执行异步任务的实例内容
Feb 20 Python
python调用win32接口进行截图的示例
Nov 11 Python
Python3 用什么IDE开发工具比较好
Nov 28 Python
用Python爬虫破解滑动验证码的案例解析
May 06 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
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
贴一个在Mozilla中常用的Javascript代码
2007/01/09 Javascript
在JavaScript中通过URL传递汉字的方法
2007/04/09 Javascript
jquery JSON的解析方式示例介绍
2014/07/27 Javascript
jQuery中has()方法用法实例
2015/01/06 Javascript
js控制网页前进和后退的方法
2015/06/08 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
vue实现模态框的通用写法推荐
2018/02/26 Javascript
TensorFlow.js 微信小程序插件开始支持模型缓存的方法
2020/02/21 Javascript
JavaScript实现打砖块游戏
2020/02/25 Javascript
使用Vant完成Dialog弹框案例
2020/11/11 Javascript
python实现的阳历转阴历(农历)算法
2014/04/25 Python
python中的__slots__使用示例
2015/02/26 Python
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
详解Python 模拟实现生产者消费者模式的实例
2017/08/10 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
python如何创建TCP服务端和客户端
2018/08/26 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
2019/07/09 Python
python3.7 的新特性详解
2019/07/25 Python
python 列表推导式使用详解
2019/08/29 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
2020/01/10 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
python实现扫雷游戏的示例
2020/10/20 Python
python的数学算法函数及公式用法
2020/11/18 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
pycharm 复制代码出现空格的解决方式
2021/01/15 Python
CSS3 @font-face属性使用指南
2014/12/12 HTML / CSS
银行会计业务的个人自我评价
2013/11/02 职场文书
入学生会自荐书范文
2014/02/05 职场文书
2014教师党员个人自我评议
2014/09/20 职场文书
2014年教研室工作总结
2014/12/06 职场文书
导游词之阳朔遇龙河
2019/12/16 职场文书
Python中rapidjson参数校验实现
2021/07/25 Python