利用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的@property装饰器的用法
Apr 28 Python
python 调用HBase的简单实例
Dec 18 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
Python判断一个三位数是否为水仙花数的示例
Nov 13 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
在Django admin中编辑ManyToManyField的实现方法
Aug 09 Python
python进程的状态、创建及使用方法详解
Dec 06 Python
tensorboard实现同时显示训练曲线和测试曲线
Jan 21 Python
python退出循环的方法
Jun 18 Python
详解Pycharm与anaconda安装配置指南
Aug 25 Python
使用python爬取抖音app视频的实例代码
Dec 01 Python
python turtle绘图
May 04 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/05/09 PHP
php查找任何页面上的所有链接的方法
2013/12/03 PHP
php从完整文件路径中分离文件目录和文件名的方法
2015/03/13 PHP
ThinkPHP实现更新数据实例详解(demo)
2016/06/29 PHP
PHP与SQL语句写一句话木马总结
2019/10/11 PHP
jQuery版Tab标签切换
2011/03/16 Javascript
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
JS平滑无缝滚动效果的实现代码
2016/05/06 Javascript
node.js使用redis储存session的方法
2018/09/26 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
2019/05/05 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
Vue 路由间跳转和新开窗口的方式(query、params)
2019/12/25 Javascript
Angular处理未可知异常错误的方法详解
2021/01/17 Javascript
[02:53]DOTA2英雄基础教程 山岭巨人小小
2013/12/09 DOTA
python2.x实现人民币转大写人民币
2018/06/20 Python
Python实现注册、登录小程序功能
2018/09/21 Python
从0开始的Python学习014面向对象编程(推荐)
2019/04/02 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
python集成开发环境配置(pycharm)
2020/02/14 Python
Python GUI编程学习笔记之tkinter事件绑定操作详解
2020/03/30 Python
python中sklearn的pipeline模块实例详解
2020/05/21 Python
利用 Canvas实现绘画一个未闭合的带进度条的圆环
2019/07/26 HTML / CSS
Ralph Lauren法国官网:美国高品味时装品牌
2017/12/08 全球购物
欧洲最大的滑雪假期供应商之一:Sunweb Holidays
2018/01/06 全球购物
实习医生自我评价
2013/09/22 职场文书
九年级历史教学反思
2014/01/27 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
群众路线个人对照检查材料
2014/09/23 职场文书
个人租房协议书范本
2014/09/30 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
写给老婆的保证书
2015/02/27 职场文书
超市采购员岗位职责
2015/04/07 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python
微软发布Windows 11今年最大更新22H2(附 ISO 镜像官方下载)
2022/09/23 数码科技