利用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 02 Python
用PyQt进行Python图形界面的程序的开发的入门指引
Apr 14 Python
Python urllib、urllib2、httplib抓取网页代码实例
May 09 Python
python图像处理之镜像实现方法
May 30 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
Python openpyxl 遍历所有sheet 查找特定字符串的方法
Dec 10 Python
Python模块汇总(常用第三方库)
Oct 07 Python
python 发送json数据操作实例分析
Oct 15 Python
PyTorch里面的torch.nn.Parameter()详解
Jan 03 Python
Python数组并集交集补集代码实例
Feb 18 Python
Python+unittest+DDT实现数据驱动测试
Nov 30 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/06/29 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
10个实用的PHP正则表达式汇总
2014/10/23 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
给Function做的OOP扩展
2009/05/07 Javascript
jQuery 使用手册(七)
2009/09/23 Javascript
JQuery1.8 判断元素是否绑定事件的方法
2014/07/10 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
Javascript删除指定元素节点的方法
2016/06/21 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
2017/09/16 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
基于React Native 0.52实现轮播图效果
2020/08/25 Javascript
利用原生JS实现欢乐水果机小游戏
2020/04/23 Javascript
Python中type的构造函数参数含义说明
2015/06/21 Python
python连接mongodb密码认证实例
2018/10/16 Python
python爬虫获取百度首页内容教学
2018/12/23 Python
Python列表对象实现原理详解
2019/07/01 Python
Python实现变声器功能(萝莉音御姐音)
2019/12/05 Python
CSS3动画之流彩文字效果+图片模糊效果+边框伸展效果实现代码合集
2017/08/18 HTML / CSS
市场营销毕业生自荐信
2013/11/23 职场文书
微信营销策划方案
2014/02/24 职场文书
银行青年文明号事迹材料
2014/05/31 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
大学生自我评价200字(4篇)
2014/09/17 职场文书
大学生考试作弊检讨书
2014/09/21 职场文书
公务员政审材料范文
2014/12/23 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
安全生产先进个人总结
2015/02/15 职场文书
国庆阅兵观后感
2015/06/15 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书
领导新年致辞2016
2015/07/29 职场文书
开学随笔
2015/08/15 职场文书