利用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中的文件和目录操作实现代码
Mar 13 Python
python通过字典dict判断指定键值是否存在的方法
Mar 21 Python
使用Python的Zato发送AMQP消息的教程
Apr 16 Python
python中Matplotlib实现绘制3D图的示例代码
Sep 04 Python
Python实现识别手写数字 Python图片读入与处理
Mar 23 Python
python2 与 pyhton3的输入语句写法小结
Sep 10 Python
python 实现UTC时间加减的方法
Dec 31 Python
Python异步编程之协程任务的调度操作实例分析
Feb 01 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
打印tensorflow恢复模型中所有变量与操作节点方式
May 26 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
如何验证python安装成功
Jul 06 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
迅雷下载《中学科技》怀旧期刊下载
2021/02/27 无线电
php产生随机数的两种方法实例代码 输出随机IP
2011/04/08 PHP
php中url传递中文字符,特殊危险字符的解决方法
2013/08/17 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
2014/01/14 PHP
php统计时间和内存使用情况示例分享
2014/03/13 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
2015/04/15 PHP
extjs form textfield的隐藏方法
2008/12/29 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
javascript屏蔽右键代码
2014/05/15 Javascript
jquery实现带缩略图的全屏图片画廊效果实例
2015/06/25 Javascript
信息页文内画中画广告js实现代码(文中加载广告方式)
2016/01/03 Javascript
JS组件中bootstrap multiselect两大组件较量
2016/01/26 Javascript
JavaScript知识点总结(六)之JavaScript判断变量数据类型
2016/05/31 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
vue将毫秒数转化为正常日期格式的实例
2018/09/16 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
使用jquery-easyui的布局layout写后台管理页面的代码详解
2019/06/19 jQuery
vue+ElementUI 关闭对话框清空验证,清除form表单的操作
2020/08/06 Javascript
[01:08:33]OG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
python之matplotlib学习绘制动态更新图实例代码
2018/01/23 Python
python使用rpc框架gRPC的方法
2018/08/24 Python
Python中logging日志库实例详解
2020/02/19 Python
jenkins+python自动化测试持续集成教程
2020/05/12 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
酒店人事专员岗位职责
2013/12/19 职场文书
养殖行业的创业计划书
2014/01/05 职场文书
党员违纪检讨书
2014/02/18 职场文书
学校党员干部承诺书
2015/05/04 职场文书
写给同事的离职感言
2015/08/04 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
WordPress多语言翻译插件 - WPML使用教程
2021/04/01 PHP
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python