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 修改文件指定行的方法
May 15 Python
python操作ie登陆土豆网的方法
May 09 Python
python删除指定类型(或非指定)的文件实例详解
Jul 06 Python
Python实现模拟分割大文件及多线程处理的方法
Oct 10 Python
浅谈Django自定义模板标签template_tags的用处
Dec 20 Python
python使用pycharm环境调用opencv库
Feb 11 Python
python 3.7.0 安装配置方法图文教程
Aug 27 Python
使用Python实现微信提醒备忘录功能
Dec 04 Python
Django csrf 两种方法设置form的实例
Feb 03 Python
Python 日期的转换及计算的具体使用详解
Jan 16 Python
python匿名函数lambda原理及实例解析
Feb 07 Python
django 扩展user用户字段inlines方式
Mar 30 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数据记录代码
2008/06/07 PHP
PHP 裁剪图片成固定大小代码方法
2009/09/09 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
ThinkPHP使用心得分享-ThinkPHP + Ajax 实现2级联动下拉菜单
2014/05/15 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
js 图片轮播(5张图片)
2008/12/30 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
关于在IE下的一个安全BUG --可用于跟踪用户的系统鼠标位置
2013/04/17 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
原生JS实现幻灯片
2017/02/22 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
jQuery.Sumoselect插件实现下拉复选框效果
2017/11/09 jQuery
Node使用Sequlize连接Mysql报错:Access denied for user ‘xxx’@‘localhost’
2018/01/03 Javascript
javascript中的数据类型检测方法详解
2019/08/07 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
python脚本实现数据导出excel格式的简单方法(推荐)
2016/12/30 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
Python CSV文件模块的使用案例分析
2019/12/21 Python
Python3使用腾讯云文字识别(腾讯OCR)提取图片中的文字内容实例详解
2020/02/18 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
python3 循环读取excel文件并写入json操作
2020/07/14 Python
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
物理学专业自荐信
2014/06/11 职场文书
会计学专业自荐信
2014/06/25 职场文书
会计求职自荐信范文
2015/03/04 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
用python删除文件夹中的重复图片(图片去重)
2021/05/12 Python