frames=np.linspace(-np.pi,np.pi, 90)
其实就是一个 list,它的值范围为 -pi 到 pi,frames 总共有 90 帧,而 list 是一个 iterable 类型,所以它可以不停的迭代。
frames 也可以取值为整数,相当于给参数赋值 range(frames)。
frames 也可以取值为 None,那么它的结果相当于传递 itertools.count,结构就是从 0 开始,每次步进 1,无限的执行下去。
frames 还接受 generator 函数,也就是生成器,但有个前提是,生成器要符合下面的签名格式。
def gen_function() -> obj
参数列表为空,但需要返回一个值,这个值就会传入到 func 回调函数当中。
func 是回调函数,它会在每次更新的时候被调用,所以我们只需要在这个函数中更新 figure 中的数值就可以了,就像下面代码。
def update(frame):
xdata.append(frame)
ydata.append(np.sin(frame))
ln.set_data(xdata, ydata)
return ln,
frames 和 func 的关系是什么?
实际上,frames 决定了整个动画 frame 的取值范围,它会在 interval 时间内迭代一次,然后将值传递给 func,直到整个 frames 迭代完毕。
我本人而言,也更倾向于用 generator 函数去定义 frames 而不是直接分配一个列表,所以我可以将之前的代码改写如下。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro',animated=True)
def init():
ax.set_xlim(-np.pi,np.pi)
ax.set_ylim(-1, 1)
return ln,
def update(frame):
xdata.append(frame)
ydata.append(np.sin(frame))
ln.set_data(xdata, ydata)
return ln,
def data_gen():
frame = -np.pi
step = 2 * np.pi / 90
while frame < np.pi:
frame += step
yield frame
anim = animation.FuncAnimation(fig, update, frames=data_gen,interval=10,
init_func=init,blit=True)
plt.show()
data_gen 就是一个生成器函数,它会每隔 10ms 运行一次,然后将结果传递给 update 函数。
data_gen 里面运用到了 yield 关键字,这是的我们可以在每次迭代时才返回相应的结构,而不要在一开始就分配。如果不熟悉这方面知识点的同学,可以自行搜索相应的知识。
因为经常写博客,所以也经常需要将结果保存下来,一般我会保存为 .gif 格式图片,本篇博文的 gif 图像就是通过 matplotlib 保存的。
好在用 matplotlib 实现它也并不难。
anim.save('test_animation.gif',writer='imagemagick')
一句代码就搞定了,运行成功后,会在当前目录下生成 test_animation.gif 图像。
需要注意到的是,如果要保存 gif 图像,这要求开发者电脑已经安装了 ImageMagicK。
ubuntu 用户可以通过如下命令安装。
sudo apt-get install imagemagick
并且,动画保存的时候要指定 writer 为 imagemagick.
动画可以保存为 gif 图像,自然也能保存为 mp4 视频格式。
但这要求开发者计算机已经安装好 ffmpeg 库,并且 save 方法中指定 writer 为 ffmpeg,具体细节请读者自行扩展阅读。
在自学机器学习或者是深度学习的过程中,有的时候总想把执行过程或者执行结果显示出来,所以就想到了动画。好在用 Python 实现动画有许多中方式,而大家熟知的 Matplotlib 库就可以实现。本文的目的是对 Matplotlib 的动画实现手段做一个简单的说明。绘制动画import matplotlib.pyplot as pltimport matplotlib.animation a...
一、现有的集成工具
绘制动图可以用一些现有的集成库,但是很麻烦,你需要调整和他们一样的参数和格式,定制化程度比较低,还得再去搞懂它们的东西。比如这些现有的:
https://github.com/JackMcKew/pandas_alive
二、多张图片的合成
使用Python PIL.Image 制作GIF图片:
import PIL.Image # 相关模块
img = Image.open(img_name) #
写在前面:为了可视化机器学习过程,并且保存下来,所以想直接利用 保存动图,期间参考了好多资料,过程比较艰辛,所以想记录下来。当然,此文还参考了好多网上的其它文章,再此一并感谢那些热爱分享的 ,并且参考资料中给出链接。所有代码整理到GitHub。
先上效果!
0. 前期准备
安装 和 。具体安装直接上官网便可,遇到什么问题在网上基本可以搜到答案的,这里就不介绍了。这里要简单的使用 生成...
from pandas import DataFrame
Data1 = {'Unemployment_Rate': [6.1,5.8,5.7,5.7,5.8,5.6,5.5,5.3,5.2,5.2],
'Stock_Index_Price': [1500,1520,1525,1523,1515,1540,1545,1560,1555,1565]
df1 =
主要运用matplotlib.animation,保存动图的代码为:
ani.save(“test.gif”, writer=‘pillow’)
writer='pillow’不能不加。
示例(根据matplotlib官网示例进行修改):
import itertools
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def data_gen():
for c