利用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模块之StringIO使用示例
Apr 08 Python
Python 闭包的使用方法
Sep 07 Python
Django Admin 实现外键过滤的方法
Sep 29 Python
Python http接口自动化测试框架实现方法示例
Dec 06 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
python3+selenium自动化测试框架详解
Mar 17 Python
利用Python半自动化生成Nessus报告的方法
Mar 19 Python
python 的 scapy库,实现网卡收发包的例子
Jul 23 Python
Django应用程序入口WSGIHandler源码解析
Aug 05 Python
Python 实现网课实时监控自动签到、打卡功能
Mar 12 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
使用Pytorch搭建模型的步骤
Nov 16 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 第一节 php简介
2012/04/28 PHP
ThinkPHP之import方法实例详解
2014/06/20 PHP
PHP错误处理函数
2016/04/03 PHP
Thinkphp5.0框架视图view的循环标签用法示例
2019/10/12 PHP
在textarea中显示html页面的javascript代码
2007/04/20 Javascript
jQuery Ajax文件上传(php)
2009/06/16 Javascript
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
jquery CSS选择器笔记
2010/03/29 Javascript
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
JS判断不同分辨率调用不同的CSS样式文件实现思路及测试代码
2013/01/23 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
jQuery中:checked选择器用法实例
2015/01/04 Javascript
使用控制台破解百小度一个月只准改一次名字
2015/08/13 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
Element Input组件分析小结
2018/10/11 Javascript
Jquery让form表单异步提交代码实现
2019/11/14 jQuery
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
python代码制作configure文件示例
2014/07/28 Python
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
使用Python读写及压缩和解压缩文件的示例
2016/07/08 Python
python使用mysql的两种使用方式
2018/03/07 Python
Django读取Mysql数据并显示在前端的实例
2018/05/27 Python
Python flask框架post接口调用示例
2019/07/03 Python
Python代码使用 Pyftpdlib实现FTP服务器功能
2019/07/22 Python
Python unittest 自动识别并执行测试用例方式
2020/03/09 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
室内设计自我鉴定
2013/10/15 职场文书
总经理助理岗位职责
2013/11/08 职场文书
工程专业毕业生自荐信范文
2013/12/25 职场文书
2015年音乐教师个人工作总结
2015/05/20 职场文书
Python 如何实现文件自动去重
2021/06/02 Python