利用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 getopt模块处理命令行选项实例
May 13 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
python中异常报错处理方法汇总
Nov 20 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
python实现求两个字符串的最长公共子串方法
Jul 20 Python
pandas 数据归一化以及行删除例程的方法
Nov 10 Python
对Python3+gdal 读取tiff格式数据的实例讲解
Dec 04 Python
python opencv读mp4视频的实例
Dec 07 Python
python初步实现word2vec操作
Jun 09 Python
哪些是python中web开发框架
Jun 17 Python
Pytorch实验常用代码段汇总
Nov 19 Python
pandas中对文本类型数据的处理小结
Nov 01 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
PHP通过session id 实现session共享和登录验证的代码
2012/06/03 PHP
PHP易混淆函数的区别及用法汇总
2014/11/22 PHP
必须收藏的23个php实用代码片段
2016/02/02 PHP
收集的网上用的ajax之chat.js文件
2007/04/08 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
2015/03/04 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
JS实现的幻灯片切换显示效果
2016/09/07 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
纯js的右下角弹窗实例
2017/03/12 Javascript
页面缩放兼容性处理方法(zoom,Firefox火狐浏览器)
2017/08/29 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
2017/10/24 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
图解NodeJS实现登录注册功能
2019/09/16 NodeJs
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
利用 Monkey 命令操作屏幕快速滑动
2016/12/07 Python
详解python 发送邮件实例代码
2016/12/22 Python
windows下python之mysqldb模块安装方法
2017/09/07 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
Python检查图片是否损坏及图片类型是否正确过程详解
2019/09/30 Python
Python实现元素等待代码实例
2019/11/11 Python
带你学习Python如何实现回归树模型
2020/07/16 Python
Html5之自定义属性(data-,dataset)
2019/11/19 HTML / CSS
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
优瑞自动咖啡机官网:Jura
2018/09/29 全球购物
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
科颜氏英国官网:Kiehl’s英国
2019/11/20 全球购物
ktv收银员岗位职责
2013/12/16 职场文书
党员个人对照检查材料
2014/10/01 职场文书
2014年药房工作总结
2014/11/22 职场文书
毕业设计论文评语
2014/12/31 职场文书
《初涉尘世》读后感3篇
2020/01/10 职场文书