Matplotlib - Celluloid 库
celluloid 库是一个与 Matplotlib 配合使用的第三方库,用于创建动画。它通过管理每个动画帧的 figure 和 axis 变化,简化了创建动态可视化的过程。它提供了用户友好的接口,让你可以专注于每个帧的内容,而不必处理复杂的动画细节。
Matplotlib Celluloid 库
Matplotlib 是一个用于创建各种可视化(如图表和图形)的实用 Python 库。如果你想为你的图表添加动画,可以使用 celluloid 库。它简化了使用 Matplotlib 生成动态有趣动画的过程。在本教程中,我们将介绍使用 Matplotlib 和 celluloid 库创建动画图表的基础知识。
开始之前,请确保已安装所需的库 −
pip install matplotlib pip install celluloid
创建 Matplotlib 动画
安装好所需库后,让我们逐步了解使用 celluloid 创建 Matplotlib 动画的步骤 −
步骤 1 − 导入库
首先导入必要的库,即用于绘图的 Matplotlib、用于数值运算的 NumPy,以及来自 celluloid 库的 Camera class。
import matplotlib.pyplot as plt import numpy as np from celluloid import Camera
步骤 2 − 设置 Matplotlib Figure 和 Axis
接下来,设置标准的 Matplotlib figure 和 axis,就像为静态图表所做的那样。这些将用于可视化每个帧的数据。
fig, ax = plt.subplots()
步骤 3 − 初始化 Camera 对象
现在,我们从 "celluloid" 库中初始化 "Camera" 对象。这个对象将捕获每个动画帧,让你能够完美地创建最终的动画图表。
camera = Camera(fig)
步骤 4 − 在循环中更新帧
在循环中,通过修改数据或布局来更新每个帧的图表。在这个例子中,正弦波在每个帧中水平移动。"camera.snap()" 方法捕获当前帧。
num_frames = 50
for i in range(num_frames):
# 为每个帧更新图表
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x + i * 0.1)
ax.plot(x, y)
# 捕获当前帧
camera.snap()
步骤 5 − 显示动画
捕获所有帧后,使用 "Camera" 对象的 "animate()" 方法创建动画并显示它。
animation = camera.animate() plt.show()
完整示例
以下是一个简单动画图表的完整示例。这里,我们使用 Matplotlib 中的 celluloid 库生成正弦波的动画图表。动画遍历指定数量的帧 (num_frames),在每个帧中通过水平移动正弦波来更新它 −
import matplotlib.pyplot as plt
import numpy as np
from celluloid import Camera
# 设置 Matplotlib figure 和 axis
fig, ax = plt.subplots()
camera = Camera(fig)
# 创建动画图表
num_frames = 50
for i in range(num_frames):
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x + i * 0.1)
# 为每个帧更新图表
ax.plot(x, y)
# 捕获帧
camera.snap()
# 显示动画
animation = camera.animate()
plt.show()
生成的动画显示正弦波水平振荡,创建了动态信号的可视化表示。celluloid 库捕获每个帧,从而显示动画。
动画散点图
动画散点图是一种动态可视化,它显示点随时间移动或变化的情形。图上的每个点代表数据,随着时间推移,这些点的 Positions 会发生变化,从而创建出视觉上引人入胜的动画效果。
示例 - 动画散点图
在这里,我们使用 Matplotlib 中的 celluloid library 生成一个动画散点图。动画会遍历指定的帧数 (num_frames),并通过为每一帧生成随机的 x 和 y 坐标来更新散点图 −
import matplotlib.pyplot as plt
import numpy as np
from celluloid import Camera
# 设置 Matplotlib 的 figure 和 axis
fig, ax = plt.subplots()
camera = Camera(fig)
# 创建动画散点图
num_frames = 50
for i in range(num_frames):
x = np.random.rand(20)
y = np.random.rand(20)
# 为每一帧更新散点图
ax.scatter(x, y)
# 捕获该帧
camera.snap()
# 显示动画散点图
animation = camera.animate()
plt.show()
生成的动画显示了一组在图中随机移动的动态点。celluloid library 会捕获每一帧,从而允许显示动画散点图。
动画条形图
在动画条形图中,代表不同类别的条形会随着动画的进行而高度波动,从而创建出每个类别值随时间变化的视觉效果。
示例 - 动画条形图
在这个示例中,我们创建了一个动画条形图,每一帧中条形高度都是随机的 −
import matplotlib.pyplot as plt
import numpy as np
from celluloid import Camera
# 设置 Matplotlib 的 figure 和 axis
fig, ax = plt.subplots()
camera = Camera(fig)
# 创建动画条形图
num_frames = 50
x = np.arange(10)
for i in range(num_frames):
y = np.random.randint(1, 10, size=10)
# 为每一帧更新条形图
ax.bar(x, y)
# 捕获该帧
camera.snap()
# 显示动画条形图
animation = camera.animate()
plt.show()