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设计模式之代理模式实例
Apr 26 Python
Python多线程编程(三):threading.Thread类的重要函数和方法
Apr 05 Python
Python中的推导式使用详解
Jun 03 Python
python 全文检索引擎详解
Apr 25 Python
用Eclipse写python程序
Feb 10 Python
tensorflow识别自己手写数字
Mar 14 Python
Django Rest framework之权限的实现示例
Dec 17 Python
int在python中的含义以及用法
Jun 27 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
Django和Flask框架优缺点对比
Oct 24 Python
Python3爬虫关于代理池的维护详解
Jul 30 Python
python实现简单的井字棋
May 26 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
德劲1104的电路分析与改良
2021/03/01 无线电
使用php+xslt在windows平台上
2006/10/09 PHP
PHPMYADMIN 简明安装教程 推荐
2010/03/07 PHP
深入PHP5中的魔术方法详解
2013/06/17 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
ThinkPHP实现二级循环读取的方法
2014/11/03 PHP
PHP6新特性分析
2016/03/03 PHP
php中各种定义变量的方法小结
2017/10/18 PHP
JavaScript 数组循环引起的思考
2010/01/01 Javascript
JavaScript中的排序算法代码
2011/02/22 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
MVVM模式中ViewModel和View、Model有什么区别?
2015/06/19 Javascript
使用AngularJS和PHP的Laravel实现单页评论的方法
2015/06/19 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
详解微信小程序之scroll-view的flex布局问题
2019/01/16 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
JS实现在线ps功能详解
2019/07/31 Javascript
Python基础之函数用法实例详解
2014/09/10 Python
判断网页编码的方法python版
2016/08/12 Python
tensorflow实现简单的卷积神经网络
2018/05/24 Python
Python爬虫之正则表达式基本用法实例分析
2018/08/08 Python
在unittest中使用 logging 模块记录测试数据的方法
2018/11/30 Python
详解Selenium+PhantomJS+python简单实现爬虫的功能
2019/07/14 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
如何分离django中的媒体、静态文件和网页
2019/11/12 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
python爬虫---requests库的用法详解
2020/09/28 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
三潭印月的导游词
2015/02/12 职场文书
房屋所有权证明
2015/06/19 职场文书
暂住证明怎么写
2015/06/19 职场文书
消防安全培训工作总结
2015/10/23 职场文书
Win10系统下配置Java环境变量
2021/06/13 Java/Android