《Python数据可视化编程实战》——5.4 在matplotlib中创建动画
本节书摘来自异步社区《Python数据可视化编程实战》一书中的第5章,第5.4节,作者[爱尔兰]Igor Milovanović ,颛青山 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
5.4 在matplotlib中创建动画本节将学习如何让图表动起来。有时候,在解释当我们改变变量值时会发生什么情况的时候,动画有着更强的描述性。主要函数库的动画能力有限,但通常已足够了。接下来将解释如何使用它们。
5.4.1 准备工作从1.1版本开始,一个动画框架被添加到了标准matplotlib库中,该框架主要的类是matplotlib.animation.Animation。这个类是一个基类,它可以针对不同的行为被子类化。实际上,该框架已经提供了几个类:TimedAnimation、ArtistAnimation和FuncAnimation。表5-1给出了这几个类的描述。
为了能把动画存储到一个视频文件中,必须安装ffmpeg或者mencoder。这些包的安装根据我们所使用的操作系统的不同以及不同版本间的差别会有所不同,因此我们把它留给亲爱的读者去Google一下有效的相关信息。
5.4.2 操作步骤下述代码演示了一些matplotlib动画。
import numpy as np from matplotlib import pyplot as plt from matplotlib import animation fig = plt.figure() ax = plt.axes(xlim=(0, 2), ylim=(-2, 2)) line, = ax.plot([], [], lw=2) def init(): """Clears current frame.""" line.set_data([], []) return line, def animate(i): """Draw figure. @param i: Frame counter @type i: int x = np.linspace(0, 2, 1000) y = np.sin(2 * np.pi * (x - 0.01 * i)) * np.cos(22 * np.pi * (x - 0.01 * i)) line.set_data(x, y) return line, # This call puts the work in motion # connecting init and animate functions and figure we want to draw animator = animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True) # This call creates the video file. # Temporary, every frame is saved as PNG file # and later processed by ffmpeg encoder into MPEG4 file # we can pass various arguments to ffmpeg via extra_args animator.save(basic_animation.mp4, fps=30, extra_args=[-vcodec, libx264], writer=ffmpeg_file) plt.show()
本代码将在执行该文件的文件夹中创建文件basic_animation.mp4,同时显示一个有动画的图形窗口。该视频文件可以用大多数支持MPEG-4格式的视频播放器打开。图形(帧)看上去如图5-4所示。
上面例子中最重要的几个函数是init()、animate()和save()。首先,通过向FuncAnimate{![应为FuncAnimation。]}传入两个回调函数,init和animator。然后,调用它的save()方法保存视频文件。表5-2是关于每一个函数更多的细节内容。
matplotlib.animation.ArtistAnimation的用法和FuncAnimation不同,我们必须事先绘制出每一个artist,然后用所有artist的不同帧来实例化ArtistAnimation类。Artist动画是对matplotlib.animation.TimedAnimation类的一种封装,每N毫秒绘制一次帧,因此它支持基于时间的动画。
不幸的是,对于Mac OS X的用户来说,动画框架在该平台上却让人很苦恼,有时候甚至不能工作。这在matplotlib未来的版本中会有所改进。
异步社区 异步社区(www.epubit.com)是人民邮电出版社旗下IT专业图书旗舰社区,也是国内领先的IT专业图书社区,致力于优质学习内容的出版和分享,实现了纸书电子书的同步上架,于2015年8月上线运营。公众号【异步图书】,每日赠送异步新书。
相关文章
- Python脚本扫描给定网段的MAC地址表(scapy或 python-nmap)
- Python中python-nmap模块的使用
- Python中数据类型的转换
- Python+selenium自动化元素定位防踩坑
- python input函数
- 零基础教你快速入门Python怎么学python入门?python新手学习路线
- 如何快速学习python,学好python?能通过Python赚到的第一笔钱,有哪些经验可以分享吗?
- 请问Python零基础学会可以做哪些?python是不是很难学?
- 丢掉Excel,手把手教你用Python做可视化,还能调节动画丝滑度
- 总结python能赚钱兼职月入5000+的原因
- 【python实战】拒绝黄牛!我要用python原价冲周董演唱会~Python自动秒杀抢票脚本
- Python开发多进程、多线程以及协程是什么?项目是否用?
- 《python 与数据挖掘 》一 第2章 Python基础入门
- win10中python虚拟环境的安装、创建和基本操作
- Python 实现被动收入教程之我如何使用 python 制作我的第一个高级telegram机器人
- Python 教程之如何使用 matplotlib 在 python 中绘制数学函数
- python 插件 Flask-装饰器 惰性载入视图
- 华为OD机试 - TLV 编码(Python) | 机试题+算法思路+考点+代码解析 【2023】
- 华为OD机试 - 非严格递增连续数字序列(Python)
- 乔布斯 背单词 02 读句子 单词 字母 翻译,看动画 学英语 名言 我菜顾我在,我菜故我在,blender加python
- Unity 工具 之 报错 Jenkins 执行/调用 Python 脚本,报错提示 ‘python‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
- python使用DES加密解密
- python五十八课——正则表达式(分组)
- 【Python】python 库分类大全
- 【爬虫系列】【Python】python with as的用法