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获取android设备的GPS信息脚本分享
Mar 06 Python
Python爬虫抓取手机APP的传输数据
Jan 22 Python
浅谈python类属性的访问、设置和删除方法
Jul 25 Python
Python变量和数据类型详解
Feb 15 Python
Python的爬虫框架scrapy用21行代码写一个爬虫
Apr 24 Python
python实现遍历文件夹修改文件后缀
Aug 28 Python
5分钟 Pipenv 上手指南
Dec 20 Python
Python 虚拟空间的使用代码详解
Jun 10 Python
python写入文件自动换行问题的方法
Jul 05 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
python-numpy-指数分布实例详解
Dec 07 Python
大数据分析用java还是Python
Jul 06 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 不错的学习资料
2009/02/06 PHP
PHP MemCached 高级缓存应用代码
2010/08/05 PHP
PHP sprintf() 函数的应用(定义和用法)
2012/06/29 PHP
深入PHP中的HashTable结构详解
2013/06/13 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
Laravel5.5 手动分页和自定义分页样式的简单实现
2019/10/15 PHP
Js 订制自己的AlertBox(信息提示框)
2009/01/09 Javascript
javascript div 遮罩层封锁整个页面
2009/07/10 Javascript
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
javascript使用中为什么10..toString()正常而10.toString()出错呢
2013/01/11 Javascript
深入浅析AngularJS和DataModel
2016/02/16 Javascript
深入理解JavaScript程序中内存泄漏
2016/03/17 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
JavaScript遍历数组和对象的元素简单操作示例
2019/07/09 Javascript
es6中比较有用的7个技巧小结
2019/07/12 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
Python 字符串操作实现代码(截取/替换/查找/分割)
2013/06/08 Python
python3使用scrapy生成csv文件代码示例
2017/12/28 Python
Python 实现大整数乘法算法的示例代码
2019/09/17 Python
PyTorch中的Variable变量详解
2020/01/07 Python
使用python的pyplot绘制函数实例
2020/02/13 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
python3通过qq邮箱发送邮件以及附件
2020/05/20 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
高二化学教学反思
2014/01/30 职场文书
军神教学反思
2014/02/04 职场文书
社团活动总结报告
2014/06/27 职场文书
12.4全国法制宣传日活动总结
2014/11/01 职场文书
小学国庆节活动总结
2015/03/23 职场文书
三十年同学聚会感言
2015/07/30 职场文书