利用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的Scrapy框架十分钟爬取美女图
Dec 26 Python
Python之reload流程实例代码解析
Jan 29 Python
python 匹配url中是否存在IP地址的方法
Jun 04 Python
Django开发的简易留言板案例详解
Dec 04 Python
对python文件读写的缓冲行为详解
Feb 13 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
Python Django Vue 项目创建过程详解
Jul 29 Python
python OpenCV GrabCut使用实例解析
Nov 11 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
pycharm 中mark directory as exclude的用法详解
Feb 14 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
Jun 05 Python
python中的列表和元组区别分析
Dec 30 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中的类型约束介绍
2015/05/11 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
php+ajax实现仿百度查询下拉内容功能示例
2017/10/20 PHP
IE与Firefox下javascript getyear年份的兼容性写法
2007/12/20 Javascript
网页中的图片的处理方法与代码
2009/11/26 Javascript
iframe自适应宽度、高度 ie6 7 8,firefox 3.86下测试通过
2010/07/29 Javascript
javascript 冒泡排序 正序和倒序实现代码
2010/12/14 Javascript
javascript日期转换 时间戳转日期格式
2011/11/05 Javascript
Javascript数组的排序 sort()方法和reverse()方法
2012/06/04 Javascript
关于jQuery object and DOM element
2013/04/15 Javascript
JavaScript怎么判断图片是否加载完成以便获取其尺寸
2014/05/08 Javascript
js 获取页面高度和宽度兼容 ie firefox chrome等
2014/05/14 Javascript
jQuery 过滤方法filter()选择具有特殊属性的元素
2014/06/15 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
js 实现一些跨浏览器的事件方法详解及实例
2016/10/27 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
Bootstrap CSS使用方法
2016/12/23 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
JQuery查找子元素find()和遍历集合each的方法总结
2017/03/07 Javascript
面试常见的js算法题
2017/03/23 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
解决DataFrame排序sort的问题
2018/06/07 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
Django csrf 验证问题的实现
2018/10/09 Python
python 接收处理外带的参数方法
2018/12/03 Python
python按比例随机切分数据的实现
2019/07/11 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
详解css3 mask遮罩实现一些特效
2018/10/24 HTML / CSS
River Island美国官网:英国高街时尚品牌
2018/09/04 全球购物
英国第一摩托车和摩托车越野配件商店:GhostBikes
2019/03/10 全球购物
澳大利亚第一旅行车和房车配件店:Caravan RV Camping
2020/12/26 全球购物
廉政教育的心得体会
2014/09/01 职场文书
大学军训的体会
2014/11/08 职场文书
管理者日常工作必备:22条企业管理流程模板!
2019/07/12 职场文书