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实现监控linux性能及进程消耗性能的方法
Jul 25 Python
python通过线程实现定时器timer的方法
Mar 16 Python
python使用tensorflow保存、加载和使用模型的方法
Jan 31 Python
python3实现公众号每日定时发送日报和图片
Feb 24 Python
Python使用progressbar模块实现的显示进度条功能
May 31 Python
python生成ppt的方法
Jun 07 Python
Python如何使用k-means方法将列表中相似的句子归类
Aug 08 Python
Django调用支付宝接口代码实例详解
Apr 04 Python
Python面向对象实现方法总结
Aug 12 Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 Python
Python基础详解之描述符
Apr 28 Python
python 判断字符串当中是否包含字符(str.contain)
Jun 01 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
php+mysql 实现身份验证代码
2010/03/24 PHP
PHP文件锁定写入实例解析
2014/07/14 PHP
PHP获取photoshop写入图片文字信息的方法
2015/03/31 PHP
Yii2.0建立公共方法简单示例
2019/01/29 PHP
javascript网页关闭时提醒效果脚本
2008/10/22 Javascript
不使用ajax实现无刷新提交表单
2014/12/21 Javascript
5个数组Array方法: indexOf、filter、forEach、map、reduce使用实例
2015/01/29 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
JavaScript 动态加载脚本和样式的方法
2015/04/13 Javascript
js实现适用于素材网站的黑色多级菜单导航条效果
2015/08/24 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
AngularJS入门教程之模块化操作用法示例
2016/11/02 Javascript
基于JavaScript实现轮播图原理及示例
2020/04/10 Javascript
利用node.js本地搭建HTTP服务器
2017/04/19 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
nodejs语言实现验证码生成功能的示例代码
2019/10/13 NodeJs
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
js实现限定区域范围拖拉拽效果
2020/11/20 Javascript
python使用tornado实现登录和登出
2018/07/28 Python
pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换实例
2018/08/02 Python
pygame实现雷电游戏雏形开发
2018/11/20 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
浅析matlab中imadjust函数
2020/02/27 Python
Python3 Tensorlfow:增加或者减小矩阵维度的实现
2020/05/22 Python
Python爬虫设置ip代理过程解析
2020/07/20 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
2021/02/02 Python
美国受欢迎的女性牛仔裤品牌:DL1961
2016/11/12 全球购物
几道Web/Ajax的面试题
2016/11/05 面试题
应届生服装设计自我评价
2013/09/20 职场文书
生日庆典策划方案
2014/06/02 职场文书
学校消防安全责任书
2014/07/23 职场文书
2015迎新晚会开场白
2015/07/17 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
python高温预警数据获取实例
2022/07/23 Python