利用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 25 Python
Python和GO语言实现的消息摘要算法示例
Mar 10 Python
python生成tensorflow输入输出的图像格式的方法
Feb 12 Python
python 实现判断ip连通性的方法总结
Apr 22 Python
python矩阵的转置和逆转实例
Dec 12 Python
Django中在xadmin中集成DjangoUeditor过程详解
Jul 24 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
Oct 17 Python
Python猜数字算法题详解
Mar 01 Python
jupyter notebook 增加kernel教程
Apr 10 Python
Python requests.post方法中data与json参数区别详解
Apr 30 Python
Django xadmin安装及使用详解
Oct 26 Python
python机器学习Github已达8.9Kstars模型解释器LIME
Nov 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
php知道与问问的采集插件代码
2010/10/12 PHP
php获取淘宝分类id示例
2014/01/16 PHP
PHP切割汉字的常用方法实例总结
2019/04/27 PHP
php输出形式实例整理
2020/05/05 PHP
一些有用的JavaScript和jQuery的片段分享
2011/08/23 Javascript
分享几个超级震憾的图片特效
2012/01/08 Javascript
web性能优化之javascript性能调优
2012/12/28 Javascript
JS保留小数点(四舍五入、四舍六入)实现思路及实例
2013/04/25 Javascript
JS将所有对象s的属性复制给对象r(原生js+jquery)
2014/01/25 Javascript
jQuery源码解读之hasClass()方法分析
2015/02/20 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
原生js编写autoComplete插件
2016/04/13 Javascript
基于jquery实现表格内容筛选功能实例解析
2016/05/09 Javascript
原生js实现网易轮播图效果
2020/04/10 Javascript
浅析Jquery操作select
2016/12/13 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
纯js实现图片匀速淡入淡出效果
2017/08/22 Javascript
vuejs实现本地数据的筛选分页功能思路详解
2017/11/15 Javascript
JS实现访问DOM对象指定节点的方法示例
2018/04/04 Javascript
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
python操作CouchDB的方法
2014/10/08 Python
用Python编写分析Python程序性能的工具的教程
2015/04/01 Python
分析并输出Python代码依赖的库的实现代码
2015/08/09 Python
windows下python和pip安装教程
2018/05/25 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Flask-Mail用法实例分析
2018/07/21 Python
python 日志 logging模块详细解析
2020/03/31 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
欧洲著名的珠宝和手表网上商城:uhrcenter
2017/04/10 全球购物
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
EM Cosmetics官网:由彩妆大神Michelle Phan创办的独立品牌
2020/04/27 全球购物
2014年学生党支部工作总结
2014/12/20 职场文书
运动会广播稿100字
2015/08/19 职场文书
早上好问候语大全
2015/11/10 职场文书
学习党章心得体会2016
2016/01/15 职场文书
2016先进集体事迹材料范文
2016/02/25 职场文书