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 相关文章推荐
5种Python单例模式的实现方式
Jan 14 Python
Windows下安装python MySQLdb遇到的问题及解决方法
Mar 16 Python
Python实现获取前100组勾股数的方法示例
May 04 Python
一些Centos Python 生产环境的部署命令(推荐)
May 07 Python
解决Python pandas plot输出图形中显示中文乱码问题
Dec 12 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
解决使用PyCharm时无法启动控制台的问题
Jan 19 Python
python实现石头剪刀布程序
Jan 20 Python
django中使用事务及接入支付宝支付功能
Sep 15 Python
Django框架教程之中间件MiddleWare浅析
Dec 29 Python
Flask缓存静态文件的具体方法
Aug 02 Python
Expected conditions模块使用方法汇总代码解析
Aug 13 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下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
jQuery自动切换/点击切换选项卡效果的小例子
2013/08/12 Javascript
浅析JavaScript中的delete运算符
2013/11/30 Javascript
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
JavaScript学习笔记之JS对象
2015/01/22 Javascript
jQuery选择器源码解读(六):Sizzle选择器匹配逻辑分析
2015/03/31 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
jquery在ie7下选择器的问题导致append失效的解决方法
2016/01/10 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
Bootstrap popover用法详解
2016/12/22 Javascript
jQuery 实时保存页面动态添加的数据的示例
2017/08/14 jQuery
微信小程序顶部导航栏滑动tab效果
2019/01/28 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
vue3.0中setup使用(两种用法)
2020/12/02 Vue.js
Python中使用logging模块打印log日志详解
2015/04/05 Python
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
Python实现简单生成验证码功能【基于random模块】
2018/02/10 Python
python保存数据到本地文件的方法
2018/06/23 Python
Python元组知识点总结
2019/02/18 Python
蔻驰美国官网:COACH美国
2016/08/18 全球购物
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
别名指示符是什么
2012/10/08 面试题
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
质量工程师岗位职责
2013/11/16 职场文书
毕业生个人投资创业计划书
2014/01/04 职场文书
英语专业学生个人求职信
2014/01/28 职场文书
医学类个人求职信范文
2014/02/05 职场文书
安全协议书
2014/04/23 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
强烈推荐:小学生:暑假作息时间表(值得收藏)
2019/07/09 职场文书
python图像处理 PIL Image操作实例
2022/04/09 Python
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers