利用Python如何制作好玩的GIF动图详解


Posted in Python onJuly 11, 2018

前言

之前我们分享过用Python进行可视化的9种常见方式。其实我们还能让可视化图形逼格更高一些,今天就分享一下如何让可视化秀起来:用Python和matplotlib制作GIF图表。

假如电脑上没有安装ImageMagick,先去这里按照自己的电脑系统下载对应版本,大家也可以通过三水点靠木下载:https://3water.com/softs/140766.html,如果我们想用matplotlib的save方法渲染GIF动图,就需要安装ImageMagick。

下图是我们制作的一个动图示例:

利用Python如何制作好玩的GIF动图详解

有两点需要注意: 图表中的散点不会动,会动的是直线。 X轴标题每一帧都在变化。

下面是我们制作上面GIF图的代码:

import sys
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation

fig, ax = plt.subplots()
fig.set_tight_layout(True)

# 询问图形在屏幕上的大小和DPI(每英寸点数)
# 注意当把图形保存为文件时,需要为此单独再提供一个DPI
print('fig size: {0} DPI, size in inches {1}'.format(
 fig.get_dpi(), fig.get_size_inches()))

# 绘制一个保持不变(不会被重新绘制)的散点图以及初始直线
x = np.arange(0, 20, 0.1)
ax.scatter(x, x + np.random.normal(0, 3.0, len(x)))
line, = ax.plot(x, x - 5, 'r-', linewidth=2)

def update(i):
 label = 'timestep {0}'.format(i)
 print(label)
# 更新直线和轴(用一个新X轴标签)
 # 以元组形式返回这一帧需要重新绘制的物体
 line.set_ydata(x - 5 + i)
 ax.set_xlabel(label)
 return line, ax

if __name__ == '__main__':
 # 会为每一帧调用Update函数
 # 这里FunAnimation设置一个10帧动画,每帧间隔200ms
 anim = FuncAnimation(fig, update, frames=np.arange(0, 10), interval=200)
 if len(sys.argv) > 1 and sys.argv[1] == 'save':
  anim.save('line.gif', dpi=80, writer='imagemagick')
 else:
  # Plt.show()会一直循环动画
  plt.show()

如果你想换个再酷炫点的主题,可以用seaborn库,只需添加:

import seaborn

那么就会得到下面这张GIF图:

利用Python如何制作好玩的GIF动图详解

稍微提醒一下:虽然我们这里的GIF图只有10帧,图形内容也很简单,但每一帧仍有160k左右。因为GIF动图不使用跨帧压缩,所以这就让帧比较长的GIF图变得很大。将帧数尽量减少,并且让每一帧的图像再小一点(通过在matplotlib中调整图形大小或DPI)能或多或少有助于缓解这个问题。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

参考资料:drawing-animated-gifs-with-matplotlib/

Python 相关文章推荐
Python实现的百度站长自动URL提交小工具
Jun 27 Python
对Python进行数据分析_关于Package的安装问题
May 22 Python
python实战教程之自动扫雷
Jul 13 Python
pygame游戏之旅 python和pygame安装教程
Nov 20 Python
利用python脚本如何简化jar操作命令
Feb 24 Python
用vue.js组件模拟v-model指令实例方法
Jul 05 Python
Python的Tkinter点击按钮触发事件的例子
Jul 19 Python
Django如何使用jwt获取用户信息
Apr 21 Python
matlab中二维插值函数interp2的使用详解
Apr 22 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 Python
python入门教程之基本算术运算符
Nov 13 Python
python opencv肤色检测的实现示例
Dec 21 Python
用pandas中的DataFrame时选取行或列的方法
Jul 11 #Python
Python2实现的图片文本识别功能详解
Jul 11 #Python
利用Python进行数据可视化常见的9种方法!超实用!
Jul 11 #Python
基于数据归一化以及Python实现方式
Jul 11 #Python
numpy.std() 计算矩阵标准差的方法
Jul 11 #Python
使用sklearn进行对数据标准化、归一化以及将数据还原的方法
Jul 11 #Python
使用sklearn之LabelEncoder将Label标准化的方法
Jul 11 #Python
You might like
yii操作session实例简介
2014/07/31 PHP
密码强度检测效果实现原理与代码
2013/01/04 Javascript
Javascript中3个需要注意的运算符
2015/04/02 Javascript
js实现图片轮播效果
2015/12/19 Javascript
纯前端JavaScript实现Excel IO案例分享
2016/08/26 Javascript
Angular2安装angular-cli
2017/05/21 Javascript
Bootstrap一款超好用的前端框架
2017/09/25 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
实例学习JavaScript读取和写入cookie
2018/01/29 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
使用rollup打包JS的方法步骤
2018/12/05 Javascript
ant design实现圈选功能
2019/12/17 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
vue.js使用v-model实现父子组件间的双向通信示例
2020/02/05 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
Python简单调用MySQL存储过程并获得返回值的方法
2015/07/20 Python
Python实现一个Git日志统计分析的小工具
2017/12/14 Python
PyQt5主窗口动态加载Widget实例代码
2018/02/07 Python
python Opencv将图片转为字符画
2021/02/19 Python
pygame游戏之旅 添加游戏介绍
2018/11/20 Python
Python魔法方法详解
2019/02/13 Python
python实现在cmd窗口显示彩色文字
2019/06/24 Python
python中的反斜杠问题深入讲解
2019/08/12 Python
python 进程的几种创建方式详解
2019/08/29 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
Python实现区域填充的示例代码
2021/02/03 Python
使用CSS3来匹配横屏竖屏的简单方法
2015/08/04 HTML / CSS
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
canvas与html5实现视频截图功能示例
2016/12/15 HTML / CSS
售后主管岗位职责
2013/12/08 职场文书
求职信名称怎么写
2014/05/26 职场文书
2015年母亲节寄语
2015/03/23 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server
MYSQL事务的隔离级别与MVCC
2022/05/25 MySQL