利用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发送SMTP邮件的教程
Apr 29 Python
Python处理字符串之isspace()方法的使用
May 19 Python
Python实现简单拆分PDF文件的方法
Jul 30 Python
Python黑魔法Descriptor描述符的实例解析
Jun 02 Python
Python 将pdf转成图片的方法
Apr 23 Python
Python中判断输入是否为数字的实现代码
May 26 Python
Python查找文件中包含中文的行方法
Dec 19 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 Python
python实现简单飞行棋
Feb 06 Python
Python 调用 ES、Solr、Phoenix的示例代码
Nov 23 Python
python爬取豆瓣电影TOP250数据
May 23 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
单位速度在实战中的运用
2020/03/04 星际争霸
PHP关于htmlspecialchars、strip_tags、addslashes的解释
2014/07/04 PHP
php绘制一条弧线的方法
2015/01/24 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
ext form 表单提交数据的方法小结
2008/08/08 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
js和as的稳定传值问题解决
2013/07/14 Javascript
跟我学Nodejs(一)--- Node.js简介及安装开发环境
2014/05/20 NodeJs
jquery 实现输入邮箱时自动补全下拉提示功能
2015/10/04 Javascript
JavaScript通过改变文字透明度实现的文字闪烁效果实例
2017/04/27 Javascript
详解基于node的前端项目编译时内存溢出问题
2017/08/01 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
javascript数组拍平方法总结
2018/01/20 Javascript
JavaScript使用享元模式实现文件上传优化操作示例
2018/08/07 Javascript
vue异步axios获取的数据渲染到页面的方法
2018/08/09 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
2020/11/05 Javascript
python写入xml文件的方法
2015/05/08 Python
python最长回文串算法
2018/06/04 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
Django forms组件的使用教程
2018/10/08 Python
python调用摄像头拍摄数据集
2019/06/01 Python
python挖矿算力测试程序详解
2019/07/03 Python
pycharm修改文件的默认打开方式的步骤
2019/07/29 Python
Python pygame绘制文字制作滚动文字过程解析
2019/12/12 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
Python 如何对文件目录操作
2020/07/10 Python
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
new修饰符是起什么作用
2015/06/28 面试题
学校出纳员岗位职责
2014/03/18 职场文书
兵马俑导游词
2015/02/02 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
情侣之间的道歉短信
2015/05/12 职场文书
2016基督教会圣诞节开幕词
2016/03/04 职场文书
MySQL示例讲解数据库约束以及表的设计
2022/06/16 MySQL