如何在 matplotlib 中绘制 3D patch Collection?
背景
Matplotlib 是 Python 可视化库中的佼佼者,其广泛应用于科学计算、数据可视化、工业控制等诸多领域。Matplotlib 提供了许多函数和接口,使得我们可以轻松地绘制 2D 图像和简单的 3D 图像。但是随着数据参数的增加,可能会使得图像变得非常复杂,这时我们就需要用到 3D patch Collection,它可以让我们更方便地绘制 3D 图像,使得我们不仅可以探索数据的形状,而且可以在大规模数据集上更好地观察细节。
3D Patch Collection 是什么?
3D Patch Collection 能够帮助用户从多个外部边缘和面片构成的对象中实现可视化。每个元素都会被添加到三维情形的集合对象中。该对象可以在三维空间中的不同角度下显示。
一幅由 3D Patch Collection 组成的图像,通常由许多小的元素组成,每个元素都由几何形状、边缘以及面片构成。
如何使用 3D Patch Collection
要使用 3D Patch Collection,我们需要导入matplotlib
和 mpl_toolkits.mplot
中的mplot3d
。这个库使得 Matplotlib 能够绘制 3D 图表。
接着我们需要创建一个 Axes3D 类型的子图,它的父类将会创建一个三维坐标系。我们可以使用 Subplot3D 类 来完成这项操作,代码如下所示:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
这段代码生成了一个子图,在 3D 中绘制一个坐标系。我们可以从数据中创建 3D Patch Collection。通常是用 vertices 和 faces 参数来创建这些元素。这些参数具有几何形状,边缘和面片的坐标信息。
- vertices 定义每个元素的顶点坐标和选项。
-
faces 定义每个顶点连接的面组合。
下面是一个例子,演示如何绘制一个标准的 3D Patch Collection。我们将使用两个顶点和一个面,绘制一个立方体。
from mpl_toolkits.mplot3d.art3d import Poly3DCollection, Line3DCollection
# 绘制立方体
x = [0, 1, 1, 0]
y = [0, 0, 1, 1]
z = [0, 1, 0, 1]
verts = [list(zip(x, y, z))]
ax.add_collection3d(Poly3DCollection(verts, facecolors='g', linewidths=1, edgecolors='k', alpha=.3))
接着我们可以绘制多重 3D Patch Collection。可以使每个 Patch 差异化,以突出显示不同的元素组件。
下面是一段绘制带有多个 3D Patch Collection 组件的代码。
# 创建多 3D Patch Collection 对象
verts = []
colors = []
for xi in x:
for yi in y:
for zi in z:
verts.append([(xi, yi, zi),
(xi + dx, yi, zi),
(xi + dx, yi + dy, zi),
(xi, yi + dy, zi)])
colors.append('r')
ax.add_collection3d(Poly3DCollection(verts, facecolors=colors, linewidths=1, edgecolors='k', alpha=.25))
这被用来产生像这样的更复杂的图形。
总而言之,3D Patch Collection 是一个很有用的工具,可以帮助我们更加容易地绘制一些复杂的 3D 图像,这对于处理大规模数据集时非常有用。我们可以使用 Poly3DCollection
和 Line3DCollection
来绘制 3D 元素,并通过改变它们的属性,使得这些元素组成不同的组件,以达到差异化的效果。Matplotlib 提供了非常完善的 3D 图像支持,让我们方便地绘制出高质量的 3D 图像。
参考文献