利用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之有点简约的元组
Sep 24 Python
Python实现国外赌场热门游戏Craps(双骰子)
Mar 31 Python
python 中if else 语句的作用及示例代码
Mar 05 Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 Python
对Python w和w+权限的区别详解
Jan 23 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
在python中利用dict转json按输入顺序输出内容方式
Feb 27 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
Feb 29 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
keras .h5转移动端的.tflite文件实现方式
May 25 Python
实现Python3数组旋转的3种算法实例
Sep 16 Python
python 写一个水果忍者游戏
Jan 13 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产生随机字符串函数
2006/12/06 PHP
php页面跳转session cookie丢失导致不能登录等问题的解决方法
2016/12/12 PHP
Smarty模板语法详解
2019/07/20 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
js每次Title显示不同的名言
2008/09/25 Javascript
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
关于锚点跳转及jQuery下相关操作与插件
2012/10/01 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
再谈JavaScript异步编程
2016/01/27 Javascript
Atitit.js的键盘按键事件捆绑and事件调度
2016/04/01 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
javascript使用btoa和atob来进行Base64转码和解码
2017/03/20 Javascript
jQuery插件FusionCharts实现的MSBar3D图效果示例【附demo源码】
2017/03/23 jQuery
JS实现新建文件夹功能
2017/06/17 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
微信小程序动态显示项目倒计时
2019/06/20 Javascript
VUE路由动态加载实例代码讲解
2019/08/26 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
[06:16]DOTA2守卫传承者——职业选手谈心路历程
2015/02/26 DOTA
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
python实现的各种排序算法代码
2013/03/04 Python
使用Python实现跳帧截取视频帧
2019/05/31 Python
python logging模块的使用总结
2019/07/09 Python
浅谈Python type的使用
2019/11/19 Python
Django框架静态文件处理、中间件、上传文件操作实例详解
2020/02/29 Python
Html5让容器充满屏幕高度或自适应剩余高度的布局实现
2020/05/14 HTML / CSS
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
英国购买威士忌网站:Master of Malt
2019/09/26 全球购物
牛津在线药房:Oxford Online Pharmacy
2020/11/16 全球购物
平面设计岗位职责
2013/12/14 职场文书
开业典礼主持词
2014/03/21 职场文书
安全检查汇报材料
2014/12/26 职场文书
2016年七夕情人节宣传语
2015/11/25 职场文书