Matplotlib 三角剖分
Python 的 Matplotlib 工具包可用于构建静态、动画和交互式可视化。 它使困难的事情成为可能,例如生成适合发布的图表以及制作具有缩放、平移和更新功能的交互式图表。
Matplotlib 三角剖分
为了绘制三角剖分,Matplotlib 提供了库和函数。 一个表面或平面多边形以这种方式被分成几个三角形。
通常,每个三角形顶点由两个相邻三角形共享。
Python 绘制连续曲面的能力是通过三角剖分思想实现的。 三角形可以具有用户定义的坐标,或者具有三角形中的点集合,以维持由 Delaunay 三角剖分覆盖的曲面图。
这篇文章将向我们介绍 Matplotlib 三角剖分。 函数 matplotlib.pyplot.triplot() 至少接受两个参数——x 和 y 数据点——是绘制三角剖分所必需的。
n 个点和 ntri 个三角形组成一个非结构化的三角形网格。
三角形可以使用 Delaunay 三角剖分自动创建或由用户指定它们(生成覆盖对象的三角形网格)。
让我们创建一个随机三角形:
首先,您必须导入所需的库,例如 Matplotlib、NumPy 等。
当我们生成随机三角形时,让我们首先为三角形生成随机数据。
出于演示目的,以下代码用于创建随机点云:
在为 Matplotlib 三角剖分图生成数据之前,我们确保三角剖分是真实的。 它不能包含由共线点、相同点或重叠三角形组成的三角形。
在 matplotlib.tri 函数中,使用函数 triangulation() 生成三角形,该函数至少需要两个参数,x 和 y 数据点。
我们可以使用 matplotlib.pyplot.triplot() 方法在图形上绘制三角剖分。
由于三角点云是随机生成的,因此每次执行脚本时您都会观察到一个新的三角点。
让我们在 3D 空间中执行 Matplotlib 三角剖分。 在本节中,我们将使用 Matplotlib 三角剖分绘制球体。
我们必须参数化球体以使用三角测量绘制球体。 我们必须在 x 轴上取两个向量 cos(a) 和 sin(b) 的外积,在 y 轴上取 sin(a) 和 sin(b),在 z 轴上取 cos() ( b).
a 列给出了从 0 到 2π 的等间距数字列表,b 列给出了 0 到 π 的等间距数字列表。
以下代码使用 Matplotlib 三角剖分绘制球体:
import numpy as np
from scipy.spatial import Delaunay
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
ax = plt.figure().gca(projection='3d')
def triangulateSphere(ax, k=30, cmap=cm.magma):
# domain parametrization
U = np.linspace(0, 2 * np.pi, k)
V = np.linspace(0, np.pi, k)
[X, Y] = np.meshgrid(U, V)
# sphere parametrization
S1 = np.cos(X) * np.sin(Y)
S2 = np.sin(X) * np.sin(Y)
S3 = np.cos(Y)
# triangulate the points in [0,2pi] x [0,pi]
tri = Delaunay(np.array([X.flatten(), Y.flatten()]).T)
# plot the sphere
ax.plot_trisurf(
S1.flatten(), S2.flatten(), S3.flatten(),
triangles=tri.simplices,
cmap=cmap
)
triangulateSphere(ax)
plt.show()
首先,我们导入了所需的模块并设置了图形大小。 之后,ax = plt.figure().gca(projection='3d')
将图形从 2D 更改为 3D。
numpy.linspace() 方法为列表 U 和 V 生成 30 个均匀间隔的数字。函数 numpy.meshgrid()
接受编码网格坐标的一维数组作为输入,并从坐标向量返回坐标矩阵。
向量(cos(a) 和 sin(b))、(sin(a) 和 sin(b))和(1 和 cos(b) 的数组)相应地产生列表 S1、S2 和 S3。
使用 matplotlib.pyplot.show()
函数显示三角球图。 随着参数 k 的增加,更多的点被定义,导致更小的三角形和更平滑的球体。
运行代码将输出:
相关文章
如何在 Matplotlib Pyplot 中显示网格
发布时间:2024/02/04 浏览次数:142 分类:Python
-
本文演示了如何在 Python Matplotlib 中在一个图上画一个网格。使用 grid()函数来绘制网格,并解释了如何改变网格颜色和线条类型。
在 Matplotlib 中的图中添加文字
发布时间:2024/02/04 浏览次数:180 分类:Python
-
本教程展示了我们如何使用 plt.text()方法在 Matplotlib 中为图或轴添加文字。
如何在 Matplotlib 中的多个线条之间进行填充
发布时间:2024/02/04 浏览次数:208 分类:Python
-
`fill_between()` 每次只能填充两条线之间的区域,但是我们可以选择一对行来填充多个线条之间的区域。
如何在 Matplotlib 中画一条任意线
发布时间:2024/02/04 浏览次数:166 分类:Python
-
本教程讲解了我们如何在 Matplotlib 中使用 matplotlib.pyplot.plot()、matplotlib.pyplot.vlines()、matplotlib.pyplot.hlines()方法和 matplotlib.collection.LineCollection 绘制任意线条。
Pandas 在 Matplotlib 柱状图上绘制多列图
发布时间:2024/02/04 浏览次数:189 分类:Python
-
在本教程中,我们将探讨如何使用 `DataFrame` 对象的 `plot()` 方法在柱状图上绘制多列。
如何在 Matplotlib 中绘制数据列表的直方图
发布时间:2024/02/04 浏览次数:178 分类:Python
-
本教程介绍了如何使用 plt.hist()方法从数据列表中绘制直方图。我们可以使用 plt.hist()方法从数据列表中绘制直方图。
Matplotlib 中的叠加条形图
发布时间:2024/02/04 浏览次数:182 分类:Python
-
本教程展示了如何使用 plt.bar()方法将某些数据集的条形图堆叠在另一个数据集上。我们在 Matplotlib 中使用 matplotlib.pyplot.bar()方法生成条形图。
在 Python Matplotlib 中生成反向色彩图
发布时间:2024/02/04 浏览次数:136 分类:Python
-
本教程解释了如何反转 Python Matplotlib Plot 的 Colormap。
设置 Matplotlib 网格间隔
发布时间:2024/02/04 浏览次数:250 分类:Python
-
本教程将介绍我们如何在 Matplotlib 绘图中设置网格间距,并对主要网格和次要网格应用不同的样式。