MATLAB - 绘制网格曲面



在 MATLAB 中绘制网格曲面允许您在三维空间中可视化两个变量的函数。这有助于理解函数的行为并探索其属性。MATLAB 提供了 mesh 和 surf 函数,分别用于创建网格图和曲面图。

MATLAB 中的 mesh 函数创建一个线框网格图,其中曲面由连接线表示。另一方面,surf 函数创建一个带彩色曲面的曲面图,提供更具视觉吸引力的表示。

语法

mesh(X,Y,Z)
mesh(Z)
mesh(Z,C)
mesh(ax,___)
mesh(___,Name,Value)
s = mesh(___)

让我们详细了解每种语法 -

mesh(X,Y,Z) - 创建一个 3D 曲面图,具有实线边缘颜色和无面颜色。它使用矩阵 Z 值作为由 X 和 Y 定义的 x-y 平面上的网格上方的高度。边缘颜色根据 Z 中的高度变化。

mesh(Z) - 创建一个网格图,并使用 Z 中元素的行号和列号作为 x 和 y 坐标。

mesh(Z,C) - 告诉绘图如何为边缘着色。

mesh(ax,___) - 在您选择的坐标轴上绘图,而不是当前坐标轴。您需要将坐标轴作为第一个输入提供。

mesh(___,Name,Value) - 允许您使用诸如 'FaceAlpha',0.5 之类的词来设置曲面的外观,以使其半透明。

s = mesh(___) - 提供图表的面对象。您可以使用 s 稍后更改网格图。

网格绘图示例

让我们看一些使用网格绘图的示例。

示例 1:使用 mesh(X,Y,Z)

我们拥有的代码是 -

x = -2:0.1:2;
y = -2:0.1:2;
[X, Y] = meshgrid(x, y);
Z = peaks(X, Y);
mesh(X, Y, Z);

在上面的代码中,我们 -

  • 首先使用 x = -2:0.1:2 和 y = -2:0.1:2 定义 x 和 y 坐标。
  • 然后使用 meshgrid 创建 x 和 y 值的网格,以定义 x-y 平面。
  • 使用诸如 peaks(X, Y) 之类的函数,我们根据 x-y 网格计算相应的 z 值。
  • 最后,我们使用 mesh 函数使用 x、y 和 z 值绘制 3D 曲面。曲面具有实线边缘颜色和无面颜色,边缘颜色根据 Z 中的高度变化。
using mesh

示例 2:使用 sin 函数创建带有网格的 3D 曲面图

我们拥有的代码如下 -

x = -2*pi:0.1:2*pi;
y = -2*pi:0.1:2*pi;
[X, Y] = meshgrid(x, y);
Z = sin(sqrt(X.^2 + Y.^2));
mesh(X, Y, Z);

在上面的代码中,我们有 -

  • 我们在 -2*pi 到 2*pi 的范围内定义 x 和 y 坐标。
  • 我们使用 meshgrid 创建 x 和 y 值的网格。
  • z 值是使用应用于 X 和 Y 的平方和的平方根的 sin 函数计算的。
  • 最后,我们使用 mesh 绘制 3D 曲面,并向绘图添加标签和标题。

当您在 matlab 命令窗口中执行相同的操作时,输出为 -

3d surface plot

示例 3:使用 mesh(Z)

我们拥有的代码如下 -

Z = peaks(25);
mesh(Z);

在上面的示例中,我们有 -

  • 使用 peaks 函数生成样本数据的矩阵 Z。
  • mesh 函数用于绘制 Z 的网格图。由于仅将 Z 作为输入提供,因此 MATLAB 分别使用 Z 中元素的行号和列号作为 x 和 y 坐标。

当您在 matlab 命令窗口中执行代码时,输出为 -

mesh z

示例 4:使用矩阵绘制网格

我们拥有的代码是 -

Z = [1, 2, 3, 4, 5;
   2, 3, 4, 5, 6;
   3, 4, 5, 6, 7;
   4, 5, 6, 7, 8;
   5, 6, 7, 8, 9];
mesh(Z);

在此示例中,Z 矩阵是一个 5x5 矩阵,其值沿行和列递增。mesh 函数用于绘制此自定义矩阵的网格图。

当您执行 matlab 命令窗口时,输出为 -

matrix plot mesh

示例 5:使用 mesh(Z,C)

我们拥有的代码是 -

Z = peaks(50);
C = gradient(Z);
mesh(Z, C);

在上面的示例中 -

  • 我们使用 peaks 函数创建一个矩阵 Z 来生成样本曲面数据。
  • 我们使用 gradient 函数创建一个矩阵 C,以根据 Z 中的值定义边缘颜色。
  • mesh 函数用于绘制 Z 的网格图,我们使用 C 矩阵指定边缘颜色。C 中的每个元素对应于 Z 中相应元素的边缘颜色。

当您执行代码时,输出为 -

mesh z c

示例 6:使用自定义矩阵和自定义边缘颜色矩阵绘制网格

我们拥有的代码是 -

Z = [1, 2, 3, 4, 5;
   2, 3, 4, 5, 6;
   3, 4, 5, 6, 7;
   4, 5, 6, 7, 8;
   5, 6, 7, 8, 9];
C = [0.1, 0.2, 0.3, 0.4, 0.5;
   0.2, 0.3, 0.4, 0.5, 0.6;
   0.3, 0.4, 0.5, 0.6, 0.7;
   0.4, 0.5, 0.6, 0.7, 0.8;
   0.5, 0.6, 0.7, 0.8, 0.9];

mesh(Z, C);

在上面的示例中 -

  • 我们创建了一个自定义矩阵 Z 来表示曲面。
  • 我们创建了另一个自定义矩阵 C 来定义绘图的边缘颜色。
  • mesh 函数用于绘制 Z 的网格图,我们使用 C 矩阵指定边缘颜色。C 中的每个元素对应于 Z 中相应元素的边缘颜色。

当您执行代码时,输出为 -

using custom matrix

示例 7:使用 mesh(ax,___) 绘制网格

我们拥有的代码是 -

Z = [1, 2, 3, 4, 5;
   2, 3, 4, 5, 6;
   3, 4, 5, 6, 7;
   4, 5, 6, 7, 8;
   5, 6, 7, 8, 9];

figure;
ax = axes;

mesh(ax, Z);

在上面的示例中,我们有 -

  • 我们创建了一个自定义矩阵 Z 来表示曲面。
  • 我们使用 figure 和 axes 函数创建了一个新图形和坐标轴。
  • mesh 函数用于绘制 Z 的网格图,我们将坐标轴 (ax) 作为第一个输入指定以在指定的坐标轴上绘图。

当代码执行时,输出为 -

mesh ax

示例 8:使用 mesh(___,Name,Value) 绘制网格

我们拥有的代码是 -

Z = [1, 2, 3, 4, 5;
   2, 3, 4, 5, 6;
   3, 4, 5, 6, 7;
   4, 5, 6, 7, 8;
   5, 6, 7, 8, 9];


mesh(Z, 'FaceAlpha', 0.5, 'FaceColor', 'interp', 'EdgeColor', 'none');

在上面的代码中 -

  • 我们创建了一个自定义矩阵 Z 来表示曲面。
  • mesh 函数用于绘制 Z 的网格图。在此示例中,我们使用其他名称-值对参数来自定义曲面的外观
  • 'FaceAlpha', 0.5 将曲面的透明度设置为 50%。
  • 'FaceColor', 'interp' 在曲面面上插值颜色,以获得平滑的外观。
  • 'EdgeColor', 'none' 删除曲面的边缘以获得更简洁的外观。

当代码执行时,输出为 -

mesh name value

示例 9:使用 FaceAlpha 属性绘制网格

我们拥有的代码如下 -

[X, Y, Z] = peaks(30);
colormap(jet);
mesh(X, Y, Z, 'FaceAlpha', 0.5, 'EdgeColor', 'interp');

在此示例中,colormap(jet) 命令将曲面的颜色图设置为 'jet' 颜色图,该颜色图提供一系列颜色。'EdgeColor', 'interp' 属性用于为曲面的边缘插值颜色。

当代码执行时,输出如下 -

facealpha property

示例 10:使用语法 s = mesh(___) 绘制网格

我们拥有的代码如下 -

[X, Y, Z] = peaks(30);
s = mesh(X, Y, Z);
set(s, 'FaceAlpha', 0.5, 'EdgeColor', 'interp');

在上面的示例中,我们有 -

  • peaks 函数生成具有坐标 X、Y 和高度 Z 的样本曲面数据。
  • mesh 函数用于绘制曲面的网格图,输出 s 是曲面对象的句柄。

  • 稍后,我们可以使用 set 函数和句柄 s 修改网格图的外观。在这个例子中,我们将曲面修改为半透明,使用 'FaceAlpha', 0.5,并使用插值边缘颜色,使用 'EdgeColor', 'interp'。

代码执行后的输出为 -

mesh plotting

网格曲面图下的等高线图

在网格曲面图下显示的等高线图提供了曲面等值线投影到 x-y 平面的二维表示。它通过显示曲面在不同高度的等值线,为三维网格图提供了补充视图。这使得对数据的可视化更加全面,从而深入了解曲面的形状和结构。等高线图尤其适用于识别曲面上恒定高度或强度的区域,并了解其整体模式。

语法

meshc(X,Y,Z)

meshc(X,Y,Z) - 生成一个下方带有等高线的网格图。网格图类似于一个具有实心边缘颜色且无填充颜色的 3D 曲面。它显示了来自矩阵 Z 的高度,这些高度位于由 X 和 Y 形成的网格上。边缘颜色根据 Z 中的高度变化。

示例 - 网格曲面图下的等高线绘制

我们拥有的代码是 -

[X, Y] = meshgrid(-2:.2:2, -2:.2:2);
Z = X .* exp(-X.^2 - Y.^2);
meshc(X, Y, Z);

在上面的示例中 -

  • 我们使用 meshgrid 创建 x 和 y 值的网格,并根据函数生成相应的 z 值(在本例中为 X .* exp(-X.^2 - Y.^2))。
  • meshc 函数用于创建下方带有等高线的网格图,显示 3D 曲面以及投影到曲面下方 x-y 平面的等高线。

代码执行后,我们得到的输出如下所示 -

contour plot
广告