利用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的id()函数介绍
Feb 10 Python
python开发的小球完全弹性碰撞游戏代码
Oct 15 Python
使用python脚本实现查询火车票工具
Jul 19 Python
python 输入一个数n,求n个数求乘或求和的实例
Nov 13 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
Dec 24 Python
Pandas分组与排序的实现
Jul 23 Python
pytorch 共享参数的示例
Aug 17 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
python图形开发GUI库wxpython使用方法详解
Feb 14 Python
PyCharm 2020 激活到 2100 年的教程
Mar 25 Python
Python常用数字处理基本操作汇总
Sep 10 Python
Python实现异步IO的示例
Nov 05 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获取类中常量,属性,及方法列表的方法
2009/04/09 PHP
php与XML、XSLT、Mysql的结合运用实现代码
2009/11/19 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
php二分查找二种实现示例
2014/03/12 PHP
php setcookie函数的参数说明及其用法
2014/04/20 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
Symfony2框架创建项目与模板设置实例详解
2016/03/17 PHP
php遍历替换目录下文件指定内容的方法
2016/11/10 PHP
php实现的redis缓存类定义与使用方法示例
2017/08/09 PHP
jQuery autocomplete插件修改
2009/04/17 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
一个JS函数搞定网页标题(title)闪动效果
2014/05/13 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
jquery表单提交带错误信息提示效果
2017/03/09 Javascript
javascript显示动态时间的方法汇总
2018/07/06 Javascript
JS前端知识点总结之页面加载事件,数组操作,DOM节点操作,循环和分支
2019/07/04 Javascript
一篇文章弄懂javascript中的执行栈与执行上下文
2019/08/09 Javascript
JS实现炫酷轮播图
2020/11/15 Javascript
python 字符串split的用法分享
2013/03/23 Python
python数据结构树和二叉树简介
2014/04/29 Python
Pycharm学习教程(6) Pycharm作为Vim编辑器使用
2017/05/03 Python
python中将zip压缩包转为gz.tar的方法
2018/10/18 Python
python2与python3爬虫中get与post对比解析
2019/09/18 Python
Python搭建代理IP池实现检测IP的方法
2019/10/27 Python
150行Python代码实现带界面的数独游戏
2020/04/04 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
俄罗斯苹果优质经销商商店:iPort
2020/05/27 全球购物
同学会主持词
2014/03/18 职场文书
计算机相关专业自荐信
2014/07/02 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
奔腾年代观后感
2015/06/09 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
MySQL注入基础练习
2021/05/30 MySQL
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js