利用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处理字符串之isspace()方法的使用
May 19 Python
Python实现查找系统盘中需要找的字符
Jul 14 Python
Fabric 应用案例
Aug 28 Python
Python绘制3d螺旋曲线图实例代码
Dec 20 Python
Python基于sklearn库的分类算法简单应用示例
Jul 09 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
Aug 04 Python
Python 给某个文件名添加时间戳的方法
Oct 16 Python
python判断字符串或者集合是否为空的实例
Jan 23 Python
python数组循环处理方法
Aug 26 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
Python中Qslider控件实操详解
Feb 20 Python
Python 类,对象,数据分类,函数参数传递详解
Sep 25 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+MySQL投票系统的设计和实现分享
2012/09/23 PHP
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
php导入csv文件碰到乱码问题的解决方法
2014/02/10 PHP
关于js和php对url编码的处理方法
2014/03/04 PHP
PHP ignore_user_abort函数详细介绍和使用实例
2014/07/15 PHP
set_exception_handler函数在ThinkPHP中的用法
2014/10/31 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
CodeIgniter使用smtp服务发送html邮件的方法
2015/06/10 PHP
服务器迁移php版本不同可能诱发的问题
2015/12/22 PHP
PHP获取当前系统时间的方法小结
2018/10/03 PHP
javascript call方法使用说明
2010/01/11 Javascript
jQuery $.get 的妙用 访问本地文本文件
2012/07/12 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
window.location.reload 刷新使用分析(去对话框)
2015/11/11 Javascript
javascript实现的全国省市县无刷新多级关联菜单效果代码
2016/08/01 Javascript
微信小程序登录态和检验注册过没的app.js写法
2019/05/22 Javascript
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
Python unittest单元测试框架总结
2018/09/08 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
Python获取对象属性的几种方式小结
2020/03/12 Python
解析Python 偏函数用法全方位实现
2020/06/26 Python
Python importlib模块重载使用方法详解
2020/10/13 Python
AE美国鹰日本官方网站: American Eagle Outfitters
2016/12/10 全球购物
亚马逊中国官方网站:amazon.cn
2017/05/25 全球购物
2015教师年度考核评语
2015/03/25 职场文书
会计主管岗位职责
2015/04/02 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
毕业生政审意见范文
2015/06/04 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
Python将CSV文件转化为HTML文件的操作方法
2021/06/30 Python
SQLServer权限之只开启创建表权限
2022/04/12 SQL Server