数据可视化 GIF 图,Matplotlib 也可以画出来

Posted 编程派

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据可视化 GIF 图,Matplotlib 也可以画出来相关的知识,希望对你有一定的参考价值。


今天分享的这篇译文中介绍了 matplotlib 绘图库的一个 使用示例,即如何制作 GIF 动图。本文原作者为 Eli Bendersky,译者为 唐晓霆 Jason ,由编程派 EarlGrey 校对。

译者简介:唐晓霆,在香港的成都人,城市大学研究助理,会写python,兴趣是深度学习。

这篇短文介绍如何用 Python 里的 matplotlib 画出 GIF 动图。下面的代码我在一台安装了 ImagMagick 的 Ubuntu 机器上运行过。若想要用 matplotlib 的 save 方法渲染 GIF 动图的话,就必须安装 ImageMagick 。

下面给一个动画样本:

数据可视化 GIF 图,Matplotlib 也可以画出来

有几点需要注意:

  1. 图里的散点部分是不变的;变的是直线

  2. X 轴的标题每一帧都在变化

下面上制作该图的代码:

 
   
   
 
  1. import sys

  2. import numpy as np

  3. import matplotlib.pyplot as plt

  4. from matplotlib.animation import FuncAnimation


  5. fig, ax = plt.subplots()

  6. fig.set_tight_layout(True)


  7. # 询问图形在屏幕上的尺寸和DPI(每英寸点数)。

  8. # 注意当我们把图形储存成一个文件时,我们需要再另外提供一个DPI值

  9. print('fig size: {0} DPI, size in inches {1}'.format(

  10. fig.get_dpi(), fig.get_size_inches()))


  11. # 画出一个维持不变(不会被重画)的散点图和一开始的那条直线。

  12. x = np.arange(0, 20, 0.1)

  13. ax.scatter(x, x + np.random.normal(0, 3.0, len(x)))

  14. line, = ax.plot(x, x - 5, 'r-', linewidth=2)


  15. def update(i):

  16. label = 'timestep {0}'.format(i)

  17. print(label)

  18. # 更新直线和x轴(用一个新的x轴的标签)。

  19. # 用元组(Tuple)的形式返回在这一帧要被重新绘图的物体

  20. line.set_ydata(x - 5 + i)

  21. ax.set_xlabel(label)

  22. return line, ax


  23. if __name__ == '__main__':

  24. # FuncAnimation 会在每一帧都调用“update” 函数。

  25. # 在这里设置一个10帧的动画,每帧之间间隔200毫秒

  26. anim = FuncAnimation(fig, update, frames=np.arange(0, 10), interval=200)

  27. if len(sys.argv) > 1 and sys.argv[1] == 'save':

  28. anim.save('line.gif', dpi=80, writer='imagemagick')

  29. else:

  30. # plt.show() 会一直循环播放动画

  31. plt.show()

如果你想换一个更精美的主题,安装 seaborn 库之后添加一行:

 
   
   
 
  1. import seaborn

然后你就会得到这个图:

数据可视化 GIF 图,Matplotlib 也可以画出来

提一句关于文件大小的警告:虽然我在这里分享的GIF只有 10 帧,而且图像也很简单,但是它们每一帧都占大约 160K 。就我理解而言,GIF 动图不使用跨帧压缩, 所以这使得长一点的 GIF 占的空间异常大。减少帧数到最最小并且让每一帧的图像小一点(通过在 matplotlib 里调整图形尺寸或者 DPI ),就可以多多少少帮助缓解一下这个问题。

EarlGrey:我自己测试生成的 line.gif 文件大概 86 KB 左右。


回复下方「关键词」,获取优质资源


回复关键词「 pybook03」,立即获取主页君与小伙伴一起翻译的《Think Python 2e》电子版

回复关键词「入门资料」,立即获取主页君整理的 10 本 Python 入门书的电子版

回复关键词「book 数字」,将数字替换成 0 及以上数字,有惊喜好礼哦~


推荐阅读





题图:pexels,CC0 授权。

告诉朋友们,好文我在看

以上是关于数据可视化 GIF 图,Matplotlib 也可以画出来的主要内容,如果未能解决你的问题,请参考以下文章

无奇不有! Matplotlib竟然也可画出“扭扭捏捏”的数据可视化图片!

Python 绘图与可视化 matplotlib 制作Gif动图

如何使用 matplotlib 将 3D numpy 数组可视化为 GIF? [关闭]

Python数据可视化库-Matplotlib——折线图,子图绘制

数据可视化包Matplotlib

python使用matplotlib可视化棉签图棉棒图(stem plot)展示离散而有序的数据