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实现的各种排序算法代码
Mar 04 Python
视觉直观感受若干常用排序算法
Apr 13 Python
Python随机读取文件实现实例
May 25 Python
解决PyCharm中光标变粗的问题
Aug 05 Python
AI人工智能 Python实现人机对话
Nov 13 Python
如何在python中使用selenium的示例
Dec 26 Python
用python制作游戏外挂
Jan 04 Python
python使用sqlite3时游标使用方法
Mar 13 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
Feb 24 Python
python如何查看网页代码
Jun 07 Python
你需要学会的8个Python列表技巧
Jun 24 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
Thinkphp调用Image类生成缩略图的方法
2015/03/07 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
php基于Fleaphp框架实现cvs数据导入MySQL的方法
2016/02/23 PHP
php图形jpgraph操作实例分析
2017/02/22 PHP
ThinkPHP实现生成和校验验证码功能
2017/04/28 PHP
php实现统计二进制中1的个数算法示例
2018/01/23 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
javascript URL编码和解码使用说明
2010/04/12 Javascript
offsetHeight在OnLoad中获取为0的现象
2013/07/22 Javascript
jQuery实现异步获取json数据的2种方式
2014/08/29 Javascript
jQuery中element选择器用法实例
2014/12/29 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
2017/03/04 Javascript
nodejs 终端打印进度条实例代码
2017/04/22 NodeJs
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
JavaScript面向对象程序设计中对象的定义和继承详解
2019/07/29 Javascript
简单了解vue 插值表达式Mustache
2020/07/22 Javascript
在vue项目中利用popstate处理页面返回的操作介绍
2020/08/06 Javascript
[02:11]2016国际邀请赛中国区预选赛全程回顾
2016/07/01 DOTA
Python读取键盘输入的2种方法
2015/06/16 Python
python pandas 对series和dataframe的重置索引reindex方法
2018/06/07 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
pyqt5的QWebEngineView 使用模板的方法
2018/08/18 Python
Python读取Excel表格,并同时画折线图和柱状图的方法
2018/10/14 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
python3实现字符串操作的实例代码
2019/04/16 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
Python socket实现的文件下载器功能示例
2019/11/15 Python
python实现宿舍管理系统
2019/11/22 Python
Selenium启动Chrome时配置选项详解
2020/03/18 Python
html5 sessionStorage会话存储_动力节点Java学院整理
2017/07/06 HTML / CSS
介绍一下木马病毒的种类
2015/07/26 面试题
大学生自我评价范文分享
2014/02/21 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
python数字图像处理实现图像的形变与缩放
2022/06/28 Python