Python使用Matplotlib实现雨点图动画效果的方法


Posted in Python onDecember 23, 2017

本文实例讲述了Python使用Matplotlib实现雨点图动画效果的方法。分享给大家供大家参考,具体如下:

关键点

win10安装ffmpeg
animation函数使用
update函数

win10安装ffmpeg

因为最后要将动画图保存为.mp4格式,要用到ffmpeg,去官网下载,我az下载的是windows64bit static版本的,下载后解压到软件安装常用路径,并将ffmpeg路径添加到环境变量(这个方法在最后没用,但还是添加一下)

animationa函数

准确来说是animation.FuncAnimation函数

常用参数:

animation.FuncAnimation(fig,func,frames,init_func,interval)
fig:matplotlib.figure.Figure
func:每一帧都被调用,函数的第一个参数就是下一个参数frames里的value
frames:iterable,可以是整数,整数的话等同于传递range(frames)

init_func:初始化函数,就是fig的最初设置
interval:Delay between frames in milliseconds. Defaults to 200.

update函数

这个函数涉及到每一帧变化所绘制图形里参数的变化,比如例程中的雨点大小,颜色,位置等(散点图scatter绘制),具体看代码

程序实现

最初找到了例程的基于BSD协议的,经过一些自己的修改,所以我也在代码中贴上该协议

# -----------------------------------------------------------------------------
# Copyright (c) 2015, Nicolas P. Rougier. All Rights Reserved.
# Distributed under the (new) BSD License. See LICENSE.txt for more info.
# -----------------------------------------------------------------------------
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
from matplotlib import animation
import os
#确定ffmpeg.exe的位置,试过加在环境变量里但依然提示找不到MovieWriter,最后这个方法解决了,在Python2.7版本路径名前面要声明编码是unicode的,而在Python3中有无均可,这是2.X和3.x版本的一个编码方面的区别
plt.rcParams['animation.ffmpeg_path'] = u"D:\\Applications\\ffmpeg-20170503-a75ef15-win64-static\\bin\\ffmpeg.exe"
#这里改变当前工作路径,方便下面保存文件的时候自动保存到该路径下面
os.chdir("d:\\Files\\python\\matplotlib") 
# No toolbar
matplotlib.rcParams['toolbar'] = 'None'
# New figure with white background
fig = plt.figure(figsize=(6,6), facecolor='white')
# New axis over the whole figureand a 1:1 aspect ratio
# ax = fig.add_axes([0,0,1,1], frameon=False, aspect=1)
ax = fig.add_axes([0.005,0.005,0.990,0.990], frameon=True, aspect=1)
# Number of ring
n = 50
size_min = 50
size_max = 50*50
# Ring position ,圆环位置,范围在[0,1]之间
P = np.random.uniform(0,1,(n,2))
# Ring colors环的颜色
C = np.ones((n,4)) * (0,1,0,1)
#C = np.ones((n,3)) * (1,0,1)
# Alpha color channel goes from 0 (transparent) to 1 (opaque)
# 透明度,数值在[0,1]之间
C[:,2] = np.linspace(0,1,n)
# Ring sizes环的大小,范围在[50,2500]
S = np.linspace(size_min, size_max, n)
# Scatter plot
# 散点图绘制
scat = ax.scatter(P[:,0], P[:,1], s=S, lw = 0.5,
         edgecolors = C, facecolors='None')
# Ensure limits are [0,1] and remove ticks
#保证x,y的范围在[0,1]之间,移除坐标轴标记
ax.set_xlim(0,1), ax.set_xticks([])
ax.set_ylim(0,1), ax.set_yticks([])
def update(frame):
  global P, C, S
  # Every ring is made more transparent每个环变得更透明
  C[:,3] = np.maximum(0, C[:,3] - 1.0/n)
  # Each ring is made larger每个环都比原来的大
  S += (size_max - size_min) / n
  # Reset ring specific ring (relative to frame number)
  i = frame % 50  
  P[i] = np.random.uniform(0,1,2) # P[i] = P[i,:],同时改变了x,y两个位置的值
  S[i] = size_min #从最小的形状开始
  C[i,3] = 1   #设置透明度为1 
  # Update scatter object
  # 更新scatter绘图对象的属性,例如edgecolors,sizes,offsets等
  scat.set_edgecolors(C) #设置边缘颜色
  scat.set_sizes(S)    #设置大小
  scat.set_offsets(P)   #设置偏置
  return scat,
animate = FuncAnimation(fig, update, frames = 300,interval=70)#interval是每隔70毫秒更新一次,可以查看help
FFwriter = animation.FFMpegWriter(fps=20)  #frame per second帧每秒
animate.save('rain.mp4', writer=FFwriter,dpi=360)#设置分辨率
plt.show()

Python使用Matplotlib实现雨点图动画效果的方法

生成的是mp4,把他转化成了文件很小的gif显示了一下效果,保存格式为gif的好像不行

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实现随机生成有效手机号码及身份证功能示例
Jun 05 Python
Python FTP两个文件夹间的同步实例代码
May 25 Python
Python之用户输入的实例
Jun 22 Python
Python一行代码实现快速排序的方法
Apr 30 Python
Django logging配置及使用详解
Jul 23 Python
django xadmin action兼容自定义model权限教程
Mar 30 Python
Python判断三段线能否构成三角形的代码
Apr 12 Python
python简单实现9宫格图片实例
Sep 03 Python
python 如何引入协程和原理分析
Nov 30 Python
python爬虫利用代理池更换IP的方法步骤
Feb 21 Python
总结Python常用的魔法方法
May 25 Python
利用python调用摄像头的实例分析
Jun 07 Python
简单了解什么是神经网络
Dec 23 #Python
python用户管理系统的实例讲解
Dec 23 #Python
python队列通信:rabbitMQ的使用(实例讲解)
Dec 22 #Python
python3写爬取B站视频弹幕功能
Dec 22 #Python
机器学习经典算法-logistic回归代码详解
Dec 22 #Python
利用python将xml文件解析成html文件的实现方法
Dec 22 #Python
python实现数据预处理之填充缺失值的示例
Dec 22 #Python
You might like
使用apache模块rewrite_module (转)
2007/02/14 PHP
PHP5 面向对象程序设计
2008/02/13 PHP
PHP 多维数组排序实现代码
2009/08/05 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
简易的投票系统以及js刷票思路和方法
2015/04/07 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
如何快速上手Vuex
2017/02/14 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
nodejs前端模板引擎swig入门详解
2018/05/15 NodeJs
Vue匿名插槽与作用域插槽的合并和覆盖行为
2019/04/22 Javascript
使vue实现jQuery调用的两种方法
2019/05/12 jQuery
15分钟学会vue项目改造成SSR(小白教程)
2019/12/17 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
[49:20]VG vs TNC Supermajor小组赛B组败者组决赛 BO3 第二场 6.2
2018/06/03 DOTA
Python进阶之递归函数的用法及其示例
2018/01/31 Python
使用Python的Django和layim实现即时通讯的方法
2018/05/25 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
对python 多线程中的守护线程与join的用法详解
2019/02/18 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
Python分割训练集和测试集的方法示例
2019/09/19 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
利用css3如何设置没有上下边的列表间隔线
2017/07/03 HTML / CSS
高中生学习总结的自我评价范文
2013/10/13 职场文书
仓库班组长岗位职责
2013/12/12 职场文书
课程改革实施方案
2014/03/16 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
材料员岗位职责
2015/02/10 职场文书
同学毕业留言寄语
2015/02/27 职场文书
工作保证书怎么写
2015/02/28 职场文书
Mac M1安装mnmp (Mac+Nginx+MySQL+PHP) 开发环境
2021/03/29 PHP
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python