利用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的动态重新封装的教程
Apr 11 Python
使用FastCGI部署Python的Django应用的教程
Jul 22 Python
简单学习Python time模块
Apr 29 Python
python实现下载整个ftp目录的方法
Jan 17 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
PyQt5实现简易电子词典
Jun 25 Python
python内置模块collections知识点总结
Dec 19 Python
用python爬取历史天气数据的方法示例
Dec 30 Python
matlab、python中矩阵的互相导入导出方式
Jun 01 Python
Python使用jupyter notebook查看ipynb文件过程解析
Jun 02 Python
详解selenium + chromedriver 被反爬的解决方法
Oct 28 Python
Python自动化之批量处理工作簿和工作表
Jun 03 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/03/12 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
javascript与asp.net(c#)互相调用方法
2009/12/13 Javascript
HTA版JSMin(省略修饰语若干)基于javascript语言编写
2009/12/24 Javascript
自写的一个jQuery圆角插件
2010/10/26 Javascript
js 自制滚动条的小例子
2013/03/16 Javascript
event对象获取方法总结在google浏览器下测试
2013/11/03 Javascript
node.js中的fs.read方法使用说明
2014/12/17 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
vue-router路由简单案例介绍
2017/02/21 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
js 公式编辑器 - 自定义匹配规则 - 带提示下拉框 - 动态获取光标像素坐标
2018/01/04 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
Vue向后台传数组数据,springboot接收vue传的数组数据实例
2020/11/12 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
Python模拟浏览器上传文件脚本的方法(Multipart/form-data格式)
2018/10/22 Python
Python实现的栈、队列、文件目录遍历操作示例
2019/05/06 Python
python爬虫实现中英翻译词典
2019/06/25 Python
利用Python实现Shp格式向GeoJSON的转换方法
2019/07/09 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
2019/08/22 Python
python实现连续变量最优分箱详解--CART算法
2019/11/22 Python
Pyorch之numpy与torch之间相互转换方式
2019/12/31 Python
Keras搭建自编码器操作
2020/07/03 Python
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
开发中都用到了那些设计模式?用在什么场合?
2014/08/21 面试题
采购部长岗位职责
2014/06/13 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
电子商务实训报告总结
2014/11/05 职场文书
应急管理工作总结2015
2015/05/04 职场文书
2015年图书馆个人工作总结
2015/05/26 职场文书
煤矿隐患排查制度
2015/08/05 职场文书
Go timer如何调度
2021/06/09 Golang
使用Docker容器部署rocketmq单机的全过程
2022/04/03 Servers