Skip to content

MATLAB - 绘制三维等高线图

MATLAB - 现代三维等高线图和曲面图绘制

Section titled “MATLAB - 现代三维等高线图和曲面图绘制”

在科学和工程中,可视化三维数据至关重要。三维等高线图显示函数 z = f(x, y) 在三维空间中的等值线(常数值线)。曲面图则渲染整个曲面,通常根据高度着色。MATLAB 提供了一套强大的函数来创建这些可视化。

本教程涵盖了创建三维等高线图和曲面图的现代技术,重点介绍 contour3 和 surfc 函数,以及现代面向对象定制和基于函数的绘图。

方法 1:使用 contour3 绘制三维等高线图

Section titled “方法 1:使用 contour3 绘制三维等高线图”

contour3 函数创建三维等高线图,显示曲面在不同级别(高度)上的等高线。

contour3(Z)
contour3(X, Y, Z)
contour3(..., levels)
contour3(..., LineSpec)
c = contour3(...) % 获取等高线对象以便定制

其中 X、Y 和 Z 是定义网格和该网格上高度的矩阵,通常使用 meshgrid 创建。

首先,我们创建一个 (X, Y) 坐标的二维网格,并在此网格上计算函数 Z。然后,我们绘制 Z 的等高线。

% 1. 创建数据网格
[X, Y] = meshgrid(-2:0.25:2, -2:0.25:2);
Z = X .* exp(-X.^2 - Y.^2);
% 2. 创建三维等高线图
figure; % Create a new figure window
contour3(X, Y, Z, 20); % Plot with 20 contour levels
% 3. 标注图表
title('3D Contour Plot of Z = X*exp(-X^2 - Y^2)');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
grid on;

此代码将生成一个包含三维图的图形。您将看到 20 条等高线,每条代表一个恒定的 Z 值,在三维空间中浮动。这些线条将描绘出下方曲面的形状,该曲面具有一个峰值和一个谷值。

MATLAB 中一个重要的现代实践是获取绘图对象的句柄,以便在创建后修改其属性。这提供了细粒度的控制。

[X, Y] = meshgrid(-2:0.25:2, -2:0.25:2);
Z = X .* exp(-X.^2 - Y.^2);
figure;
% 指定特定的等高线级别并捕获对象句柄
levels = [-0.4, -0.2, 0, 0.2, 0.4];
c_handle = contour3(X, Y, Z, levels);
% --- 使用对象句柄定制 ---
c_handle.LineWidth = 2; % 使线条更粗
c_handle.LineStyle = '--'; % 使用虚线
c_handle.ShowText = 'on'; % 在等高线上显示级别值
title('Customized 3D Contour Plot');
xlabel('X-axis');
ylabel('Y-axis');
view(-15, 25); % 调整视角

生成的图表将仅显示在指定 Z 级别上的五条虚线、粗等高线。每条线都将标有其对应的值(例如,‘0.2’)。视图被倾斜以提供更好的视角。

方法 2:使用 surfc 绘制带等高线的曲面图

Section titled “方法 2:使用 surfc 绘制带等高线的曲面图”

surfc 函数功能强大,因为它将彩色曲面图 (surf) 与其下方的 xy 平面上的等高线图结合在一起。这提供了数据的全面视图。

surfc(X, Y, Z)
s = surfc(...) % 获取曲面对象以便定制

让我们使用标准的 peaks 函数,它是三维绘图的常见基准。

% 1. 使用内置的 'peaks' 函数生成数据
[X, Y, Z] = peaks(25);
% 2. 创建组合的曲面和等高线图
figure;
surfc(X, Y, Z);
% 3. 定制和标注
title('Surface Plot with Contours for the Peaks Function');
xlabel('X');
ylabel('Y');
zlabel('Z');
% 更改颜色图以便更好地可视化
colormap('jet');
colorbar; % 显示颜色标尺

此脚本将生成一个带有三维曲面图的窗口。曲面的颜色与其高度对应,如侧面的颜色条所示。在三维曲面下方,即绘图的“地面”(xy 平面)上,您将看到相应的二维等高线。

surfc 实际上返回两个对象:一个用于曲面,一个用于等高线。我们可以单独捕获并修改它们。

[X, Y, Z] = peaks(25);
figure;
% 捕获两个绘图对象的句柄
[s_handle, c_handle] = surfc(X, Y, Z);
% 定制曲面
s_handle.EdgeColor = 'none'; % 移除黑色网格线以获得更平滑的外观
s_handle.FaceAlpha = 0.8; % 使曲面半透明
% 定制等高线
c_handle.LineWidth = 1.5;
title('Customized Surface and Contour Plot');
colormap('cool');

输出是更精致的可视化。三维曲面看起来平滑且略带透明,没有默认的黑色网格线。其下方的等高线略粗,使其更加突出。

对于数学函数,您通常可以通过使用 fcontour 和 fsurf 跳过 meshgrid 步骤。MATLAB 将自动在合适的范围内评估函数。

figure;
% 将函数定义为匿名函数
fun = @(x,y) x .* exp(-x.^2 - y.^2);
% 直接绘制曲面和等高线
fsurf(fun, [-2, 2]); % 范围 [-2, 2] 适用于 x 和 y
hold on;
fcontour(fun, [-2, 2], 'ZLocation', -0.5, 'LineWidth', 2); % 在 z = -0.5 处绘制等高线
hold off;
title('Direct Function Plotting with fsurf and fcontour');

当您的数据来自已知的数学表达式时,这种方法更简洁、更具声明性。

任务: 可视化导线周围的磁场强度。长直导线在原点处的磁场强度 B 遵循公式 B(x,y) = k / sqrt(x^2 + y^2),其中 k 是一个常数。

  1. 为 x 和 y 定义一个网格,避开原点(例如,使用一个小的偏移量)以防止除以零。
  2. 计算网格上每个点的 B 值。
  3. 使用 surfc 创建一个曲面图,显示场强随距离衰减的情况。
  4. 使用合适的颜色图(如 'hot')和标签定制图表。