数据可视化|自动生成图像视频(六)

Ms的编程时光2019-01-10 14:03:44

点击上方“Python编程时光”,选择“置顶公众号”

第一时间关注Python技术干货!



截至今日,数据可视化的内容已经更新到第六篇。


如果你也想跟着我一起学习 matplotlib,可以点击如下传送门前往往期系列文章:


  • 数据可视化|一张图带你入门 matplotlib(一)

  • 数据可视化|详解六种可视化图表(二)

  • 数据可视化|用正余弦图象学习matplotlib(三)

  • 数据可视化|子图与子区 难点剖析(四)

  • 数据可视化|绘制酷炫的GIF动态图(五)

01. 准备工作

再次声明下我使用的工具和环境:Anaconda+Jupyter Notebook

建议你和我使用同样的工具你才能无痛学习这个系统的教程。在绘制之前,需要安装一个工具,就是 ffmpeg具体方法请搜索引擎自行解决哈。

由于我使用的是 Anaconda ,我需要将其安装到我的环境中。首先打开我们的命令行(注意不是一般的CMD),使用windows 的查找入口:

然后执行如下命令安装

 conda install -c conda-forge ffmpeg

02. 绘制原理

我们都知道,视频是由一帧一帧的图片画面组合而成的。只不过其切换的速度很快,过渡平滑,才让我们看起来毫无违和感。

视频的录制,其实和上一章的 gif 动态图用法是一致的,只不过有用的工具方法有所不同而已。这里使用的是HTML(ani.to_html5_video())

接下来,来看看绘制的整体代码框架(伪代码)。

# 导入相关模块
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 里观察整个变化的过程。

生成的视频,可以反复播放,当然也可以右键进行下载

03. 方法参数

本节最重要的知识点,其实就一个函数(FuncAnimation),他可以接收很多参数。要使用它,必须得先知道这些参数都有什么用途。

  • fig:进行动画绘制的figure

  • init_func:自定义开始帧,即传入刚定义的函数init

  • interval:更新频率,以ms计。

  • blit:选择更新所有点,还是仅更新产生变化的点。应选择True。

  • func:接收来自 frames 函数传来的 frame 值,作为更新图像最新数据。

  • frames:可接收对象有 iterable, int, generator function, or None。用途生成数据传递给func函数

04. 录制实战

这里截取官网上一个小例子,来做个演示。代码如下:

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.11.1)
    ax.set_xlim(010)
    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 里运行后。会输出一个小短片。我将这个小短片下载并上传至后台,你可以点击下方视频感受一下。


-END-


推荐阅读


一个专科生的 Python 转行之路

用Python写一个表白神器让你七夕脱离单身

手把手教你安装 Win+Ubuntu 双系统(图文教程)

博客搭建|30分钟教你快速搭建一个顔值超高的博客



Copyright © 古田计算器虚拟社区@2017