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 06 Python
八大排序算法的Python实现
Jan 28 Python
Python编写一个闹钟功能
Jul 11 Python
Python实现的摇骰子猜大小功能小游戏示例
Dec 18 Python
详解python中的线程
Feb 10 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
基于Python的微信机器人开发 微信登录和获取好友列表实现解析
Aug 21 Python
python写入数据到csv或xlsx文件的3种方法
Aug 23 Python
基于Python中isfile函数和isdir函数使用详解
Nov 29 Python
Django 项目布局方法(值得推荐)
Mar 22 Python
python传到前端的数据,双引号被转义的问题
Apr 03 Python
Python保存并浏览用户的历史记录
Apr 29 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中如何判断AJAX提交的数据
2012/02/05 PHP
克隆一个新项目的快捷方式
2013/04/10 PHP
PHP微信开发之模板消息回复
2016/06/24 PHP
PHP创建单例后台进程的方法示例
2017/05/23 PHP
爱恋千雪-US-AscII加密解密工具(网页加密)下载
2007/06/06 Javascript
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
根据一段代码浅谈Javascript闭包
2010/12/14 Javascript
(跨浏览器基础事件/浏览器检测/判断浏览器)经验代码分享
2013/01/24 Javascript
jQuery 属性选择器element[herf*='value']使用示例
2013/10/20 Javascript
JS下载文件|无刷新下载文件示例代码
2014/04/17 Javascript
js控制文本框只输入数字和小数点的方法
2015/03/10 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
jQuery模拟select实现下拉菜单功能
2016/06/20 Javascript
Vue.js每天必学之内部响应式原理探究
2016/09/07 Javascript
jquery  实现轮播图详解及实例代码
2016/10/12 Javascript
基于vue实现多引擎搜索及关键字提示
2017/03/16 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
详解AngularJs路由之Ui-router-resolve(预加载)
2017/06/13 Javascript
node.js操作MongoDB的实例详解
2017/10/11 Javascript
vue实现PC端录音功能的实例代码
2019/06/05 Javascript
[06:53]DOTA2每周TOP10 精彩击杀集锦vol.3
2014/06/25 DOTA
Python列表计数及插入实例
2014/12/17 Python
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
python链接Oracle数据库的方法
2015/06/28 Python
python字符串,数值计算
2016/10/05 Python
浅析Python3爬虫登录模拟
2018/02/07 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
全球知名的婚恋交友网站:Match.com
2017/01/05 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
英国医生在线预约:Top Doctors
2019/10/30 全球购物
澳大利亚Rockwear官网:女子瑜伽、健身和运动服
2021/01/26 全球购物
《三峡》教学反思
2014/03/01 职场文书
毕业生如何写自我鉴定
2014/03/15 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
青年志愿者服务活动总结
2015/05/06 职场文书