集智专栏
资源加载中,请稍后...
集智专栏

怎样用Python制作好玩的GIF动图

集智小编

参考资料:drawing-animated-gifs-with-matplotlib/


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

假如电脑上没有安装ImageMagick,先去这里按照自己的电脑系统下载对应版本,如果我们想用matplotlib的save方法渲染GIF动图,就需要安装ImageMagick。

下图是我们制作的一个动图示例:

有两点需要注意: 图表中的散点不会动,会动的是直线。 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图:

稍微提醒一下:虽然我们这里的GIF图只有10帧,图形内容也很简单,但每一帧仍有160k左右。因为GIF动图不使用跨帧压缩,所以这就让帧比较长的GIF图变得很大。将帧数尽量减少,并且让每一帧的图像再小一点(通过在matplotlib中调整图形大小或DPI)能或多或少有助于缓解这个问题。

您也许喜欢这些文章

集智专栏

[Python爬虫] BeautifulSoup4基础问题:如何获取特定标签内的网页元素

发表至趣味项目
问题来自知乎,题主在使用Python的BeautifulSoup4库爬取网页时,在获取特定html标签内容过程中遇到问题:一是爬取文本内容失败,二是从文本中提出特殊符号,如括号。 Beautiful Soup提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能。它是一个工具箱,通过解析文档为用户提供需要抓取的数据,因为简单,所以不需要多少代码就可以写出一个完整的应用程序。
集智专栏

《深度学习与图像处理》书籍配套Python教程

发表至数据科学
Python是一款用途广泛的编程语言,配合第三方扩展库(Mumpy, Scipy, Matplotlib)使用,就可以成为科学计算的利器。 本文是斯坦福大学CS228——概率图模型(Probabilistic Graphical Models)的前置Python教程,也是技术图书《深度学习与图像处理》(胡博强 杨培文著)的指定前置阅读材料。
集智专栏

用Python自动化你的机器学习过程——TPOT和基因算法

发表至数据科学
一般而言,一个机器学习项目的实现过程是比较复杂的,我们通常需要依次完成数据清洗、模型训练、评测优化、生产应用等各个步骤,而这些繁杂的步骤在具体的生产实践中是难以长期使用的。因此,公司和研究机构通常会使用自动化机器学习(Automatic Machine Learning)来以流水线的形式完成机器学习过程,本文将简要了解自动化机器学习的一般概念和简单的实现方法。

文章评论(0)