企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 14.6 【可视化之matplotlib】自动生成图像视频 ## 1. 准备工作 如果你和我一样使用的是 Jupyter 这个工具的话,在绘制之前,需要安装一个工具,就是 `ffmpeg`。 安装方法,可以参考 「[在Windows上安装FFmpeg程序](https://zh.wikihow.com/%E5%9C%A8Windows%E4%B8%8A%E5%AE%89%E8%A3%85FFmpeg%E7%A8%8B%E5%BA%8F)」 由于我使用的是 Anaconda ,我需要将其安装到我的环境中。首先打开我们的命令行(注意不是一般的CMD),使用windows 的查找入口: ![](http://image.iswbm.com/20190511165315.png) 然后执行如下命令安装 ``` conda install -c conda-forge ffmpeg ``` ## 2. 绘制原理 我们都知道,视频是由一帧一帧的图片画面组合而成的。只不过其切换的速度很快,过渡平滑,才让我们看起来毫无违和感。 视频的录制,其实和上一章的 gif 动态图用法是一致的,只不过有用的工具方法有所不同而已。这里使用的是`HTML(ani.to_html5_video())` 接下来,来看看绘制的整体代码框架(伪代码)。 ```python # 导入相关模块 import numpy as np import matplotlib.pyplot as plt from IPython.display import HTML from matplotlib.animation import FuncAnimation # 生成数据(用于传入updata函数) def data_gen(): pass # 初始化图像(譬如 坐标范围) def init(): pass # 将最新数据添加到图像中 def update(data): pass # 核心方法入口 ani = FuncAnimation() # 生成一个视频动画 HTML(ani.to_html5_video()) ``` 需要注意的是,最后一个 HTML 函数里指定 `to_html5_video` 方法,能和这一整个变化的过程,转换成一个视频片段。可以很方便的让我们在 Jupyter NoteBook 里观察整个变化的过程。 生成的视频,可以反复播放,当然也可以右键进行`下载`。 ## 3. 方法参数 本节最重要的知识点,其实就一个函数(`FuncAnimation`),他可以接收很多参数。要使用它,必须得先知道这些参数都有什么用途。 - `fig`:进行动画绘制的figure - `init_func`:自定义开始帧,即传入刚定义的函数init - `interval`:更新频率,以ms计。 - `blit`:选择更新所有点,还是仅更新产生变化的点。应选择True。 - `func`:接收来自 frames 函数传来的 frame 值,作为更新图像最新数据。 - `frames`:可接收对象有 iterable, int, generator function, or None。用途生成数据传递给func函数 ## 4. 录制实战 这里截取官网上一个小例子,来做个演示。代码如下: ```python import numpy as np import matplotlib.pyplot as plt from IPython.display import HTML from matplotlib.animation import FuncAnimation # 生成数据(用于传入updata函数) def data_gen(x=0): cnt = 0 while cnt < 1000: cnt += 1 x += 0.1 yield x, np.sin(2*np.pi*x) * np.exp(-x/10.) # 初始化图像(譬如 坐标范围) def init(): ax.set_ylim(-1.1, 1.1) ax.set_xlim(0, 10) del xdata[:] del ydata[:] line.set_data(xdata, ydata) return line, # 将最新数据添加到图像中 def update(data): x, y = data xdata.append(x) ydata.append(y) line.set_data(xdata, ydata) return line, fig, ax = plt.subplots() line, = ax.plot([], [], lw=2) ax.grid() xdata, ydata = [], [] ani = FuncAnimation(fig=fig, func=update, frames=data_gen, init_func=init, interval=20, repeat=False, blit=False) HTML(ani.to_html5_video()) ``` 将这段代码放入,NoteBook 里运行后。会输出一个小短片。 我将这个小短片下载并上传至后台,你可以点击 [公众号原文](https://mp.weixin.qq.com/s/BU4DtJQxtxwEMhGZE8t3CQ) 感受一下。 ---