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基础教程之类class定义使用方法
Feb 20 Python
Linux下Python获取IP地址的代码
Nov 30 Python
简单介绍Python中的readline()方法的使用
May 24 Python
python logging日志模块的详解
Oct 29 Python
利用python实现简单的邮件发送客户端示例
Dec 23 Python
python操作excel的方法
Aug 16 Python
python+ffmpeg批量去视频开头的方法
Jan 09 Python
浅谈pandas筛选出表中满足另一个表所有条件的数据方法
Feb 08 Python
对Django中的权限和分组管理实例讲解
Aug 16 Python
解决python3.x安装numpy成功但import出错的问题
Nov 17 Python
python爬取招聘要求等信息实例
Nov 20 Python
python常见的占位符总结及用法
Jul 02 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
phpmyadmin提示The mbstring extension is missing的解决方法
2014/12/17 PHP
php类自动加载器实现方法
2015/07/28 PHP
php基于PDO连接MSSQL示例DEMO
2016/07/13 PHP
PDO::commit讲解
2019/01/27 PHP
js给dropdownlist添加选项的小例子
2013/03/04 Javascript
javascript数组操作总结和属性、方法介绍
2014/04/05 Javascript
巧用replace将文字表情替换为图片
2014/04/17 Javascript
JS实现控制表格内指定单元格内容对齐的方法
2015/03/30 Javascript
详解JavaScript操作HTML DOM的基本方式
2015/10/21 Javascript
认识Knockout及如何使用Knockout绑定上下文
2015/12/25 Javascript
Java框架SSH结合Easyui控件实现省市县三级联动示例解析
2016/06/12 Javascript
AngularJS中$watch和$timeout的使用示例
2016/09/20 Javascript
JavaScript之DOM_动力节点Java学院整理
2017/07/03 Javascript
javascript基本常用排序算法解析
2017/09/27 Javascript
使用JavaScript生成罗马字符的实例代码
2018/06/08 Javascript
Node.js Buffer模块功能及常用方法实例分析
2019/01/05 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
[02:09]抵达西雅图!中国军团加油!
2014/07/07 DOTA
Python中的模块和包概念介绍
2015/04/13 Python
面向初学者的Python编辑器Mu
2018/10/08 Python
python的set处理二维数组转一维数组的方法示例
2019/05/31 Python
Pytorch中.new()的作用详解
2020/02/18 Python
python使用Thread的setDaemon启动后台线程教程
2020/04/25 Python
Jupyter notebook如何修改平台字体
2020/05/13 Python
python对 MySQL 数据库进行增删改查的脚本
2020/10/22 Python
GNC健安喜美国官网:美国第一营养品牌
2016/07/22 全球购物
预订旅游活动、景点和旅游:GetYourGuide
2019/09/29 全球购物
卖车协议书
2014/04/21 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
员工升职自荐信
2015/03/27 职场文书
员工开除通知书
2015/04/25 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
关于python中readlines函数的参数hint的相关知识总结
2021/06/24 Python
python之基数排序的实现
2021/07/26 Python
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android