利用Python如何制作好玩的GIF动图详解

作者:集智小编 时间:2023-03-02 10:47:47 

前言

之前我们分享过用Python进行可视化的9种常见方式。其实我们还能让可视化图形逼格更高一些,今天就分享一下如何让可视化秀起来:用Python和matplotlib制作GIF图表。

假如电脑上没有安装ImageMagick,先去这里按照自己的电脑系统下载对应版本,大家也可以通过脚本之家下载:https://www.jb51.net/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/

来源:https://jizhi.im/blog/post/pytogif

标签:python,制作,gif动图
0
投稿

猜你喜欢

  • django在接受post请求时显示403forbidden实例解析

    2021-12-19 22:41:27
  • 关于Flask项目无法使用公网IP访问的解决方式

    2021-01-03 10:04:00
  • python 使用元类type创建类

    2021-06-27 21:11:48
  • 用注解编写创建表的SQL语句

    2024-01-14 01:51:11
  • 初窥交互设计

    2009-10-10 10:52:00
  • php中替换字符串函数strtr()和str_repalce()的用法与区别

    2023-11-17 06:12:53
  • vue.js 实现图片本地预览 裁剪 压缩 上传功能

    2024-05-11 09:11:06
  • Hibernate Oracle sequence的使用技巧

    2009-06-19 17:25:00
  • php过滤器使用详解

    2023-06-13 01:52:23
  • Python获取CPU、内存使用率以及网络使用状态代码

    2023-03-14 22:43:36
  • 快速创建python 虚拟环境

    2023-10-04 08:58:31
  • 使用python 和 lint 删除项目无用资源的方法

    2023-10-22 16:56:08
  • 深入了解Mysql逻辑架构

    2024-01-24 21:38:58
  • django model object序列化实例

    2022-07-03 14:55:24
  • python geopandas读取、创建shapefile文件的方法

    2022-09-23 16:57:19
  • MySql通过ip地址进行访问的方法

    2024-01-20 07:39:40
  • coffeescript使用的方式汇总

    2024-04-18 10:02:56
  • python压缩和解压缩模块之zlib的用法

    2023-09-19 08:32:07
  • python django框架中使用FastDFS分布式文件系统的安装方法

    2022-02-25 21:27:33
  • Python实现多并发访问网站功能示例

    2022-12-16 11:42:47
  • asp之家 网络编程 m.aspxhome.com