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中SQLAlchemy排序的一个坑
Feb 24 Python
python僵尸进程产生的原因
Jul 21 Python
单链表反转python实现代码示例
Feb 08 Python
python实现远程通过网络邮件控制计算机重启或关机
Feb 22 Python
pandas将DataFrame的列变成行索引的方法
Apr 10 Python
Python动态生成多维数组的方法示例
Aug 09 Python
python实现AES加密解密
Mar 28 Python
python实现桌面气泡提示功能
Jul 29 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
浅析Python __name__ 是什么
Jul 07 Python
python如何支持并发方法详解
Jul 25 Python
5 分钟读懂Python 中的 Hook 钩子函数
Dec 09 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
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
window.location和document.location的区别分析
2008/12/23 Javascript
实现JavaScript中继承的三种方式
2009/10/16 Javascript
javascript 拖动表格行实现代码
2011/05/05 Javascript
JavaScript实现页面滚动图片加载(仿lazyload效果)
2011/07/22 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
2011/10/22 Javascript
8个实用的jQuery技巧
2014/03/04 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
JS实现的驼峰式和连字符式转换功能分析
2016/12/21 Javascript
Vue.js 2.0中select级联下拉框实例
2017/03/06 Javascript
使用jquery datatable和bootsrap创建表格实例代码
2017/03/17 Javascript
JavaScript定义函数_动力节点Java学院整理
2017/06/27 Javascript
微信小程序日期时间选择器使用方法
2018/02/01 Javascript
vue组件实现弹出框点击显示隐藏效果
2020/10/26 Javascript
JavaScript中toLocaleString()和toString()的区别实例分析
2018/08/14 Javascript
使用JS获取页面上的所有标签
2018/10/18 Javascript
VUE基于NUXT的SSR 服务端渲染
2018/11/30 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
Python之list对应元素求和的方法
2018/06/28 Python
Python创建字典的八种方式
2019/02/27 Python
Python使用线程来接收串口数据的示例
2019/07/02 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
Python内置数据类型list各方法的性能测试过程解析
2020/01/07 Python
Python3 selenium 实现QQ群接龙自动化功能
2020/04/17 Python
Python json读写方式和字典相互转化
2020/04/18 Python
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
汽车装潢店创业计划书范文
2014/02/05 职场文书
求职信模板标准格式范文
2014/02/23 职场文书
民事代理词范文
2015/05/25 职场文书
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS
Python+Matplotlib+LaTeX玩转数学公式
2022/02/24 Python
使用scrapy实现增量式爬取方式
2022/06/21 Python
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android