Skip to content

MATLAB - 三维图

三维(3D)绘图对于可视化具有三个变量的数据或表示二元函数 z = f(x, y) 至关重要。MATLAB 提供了一套全面的函数,用于创建和操作三维可视化,从简单的线条图到复杂的曲面和体积数据。

以下是用于三维绘图的最常用函数:

  • 线条图 (plot3):在三维空间中绘制线条和点。非常适合可视化轨迹或具有三个分量的时间序列数据。
  • 散点图 (scatter3):在三维空间中显示单个标记。适用于可视化不连接的数据点。
  • 网格图 (mesh):通过连接网格上的点来创建线框曲面。非常适合查看曲面的底层结构。
  • 曲面图 (surf):渲染填充的彩色曲面。最适合创建平滑、逼真的三维数据可视化。

plot3(X, Y, Z) 函数在三维空间中绘制坐标。如果 X、Y 和 Z 是相同长度的向量,plot3 会绘制连接这些点的线条。

螺旋线是三维曲线的经典示例。我们可以参数化定义它并绘制它。

% 定义参数 't'
t = 0:pi/50:10*pi;
% 定义螺旋线的参数方程
x = sin(t);
y = cos(t);
z = t;
% 创建三维绘图
figure; % 创建新的图窗窗口
plot3(x, y, z, 'LineWidth', 2);
% 添加标签和标题
title('3D Helix');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
grid on;

预期输出: 将出现一个窗口,显示一条蓝色螺旋线(螺旋体),它沿 z 轴上升。绘图包含在一个带有网格以及 X、Y 和 Z 轴标签的三维坐标轴框内。

你可以自定义线条样式、标记和颜色,就像使用二维 plot 函数一样。

% 使用示例 1 中的相同螺旋线数据
t = 0:pi/50:10*pi;
x = sin(t); y = cos(t); z = t;
% 用自定义样式绘图
figure;
plot3(x, y, z, '--ro', ...
'LineWidth', 1.5, ...
'MarkerSize', 4, ...
'MarkerFaceColor', 'y');
title('Customized 3D Helix');
xlabel('X-axis');
ylabel('Y-axis');
zlabel('Z-axis');
grid on;

预期输出: 螺旋线现在是一条虚线红线(--r),每个数据点都有圆形标记(o)。标记具有黄色填充色。

要绘制曲面,你首先需要使用 meshgrid 定义 (x, y) 点的网格,然后计算网格上每个点的相应 z 值。peaks 函数是一个内置的二元样本函数,对于演示这些绘图很有用。

% 使用 peaks 函数生成网格和数据
[X, Y, Z] = peaks(30);
% 创建两个子图以比较 mesh 和 surf
figure;
% 第一个子图:网格图
subplot(1, 2, 1);
mesh(X, Y, Z);
title('Mesh Plot of Peaks');
xlabel('X'); ylabel('Y'); zlabel('Z');
% 第二个子图:曲面图
subplot(1, 2, 2);
surf(X, Y, Z);
title('Surface Plot of Peaks');
xlabel('X'); ylabel('Y'); zlabel('Z');
% 为曲面图添加颜色条
colorbar;

预期输出: 一个图窗窗口,其中包含两个并排的绘图。左侧绘图(mesh)显示了 ‘peaks’ 曲面的线框视图,你可以透过彩色线条看到。右侧绘图(surf)显示相同的曲面,但作为一个带有彩色面的实心、不透明对象。颜色条显示在曲面图旁边。

曲面图提供了许多自定义选项,例如控制色图和边缘颜色。

% 生成数据
[X, Y, Z] = peaks(30);
figure;
% 创建曲面图
surf(X, Y, Z);
% 自定义外观
title('Customized Surface Plot');
xlabel('X'); ylabel('Y'); zlabel('Z');
% 使用不同的色图
colormap(cool);
% 关闭曲面上的网格线
shading interp; % 插值颜色以获得平滑外观
% 或者使用 shading flat; 来获得刻面外观
% 或者使用 shading faceted; 来保留网格线
colorbar;

预期输出: 将显示一个使用 ‘cool’ 色图(从青色到品红色)的曲面图。shading interp 命令移除了黑色网格线,使曲面看起来平滑且连续。

当你有不属于曲面或线条的单个数据点时,请使用 scatter3。你可以自定义每个标记的大小和颜色,以表示数据的额外维度。

示例 5:具有可变大小和颜色的散点图

Section titled “示例 5:具有可变大小和颜色的散点图”
% 创建一些随机数据
N = 100;
x = rand(N, 1) * 10;
y = rand(N, 1) * 10;
z = rand(N, 1) * 10;
% 定义大小和颜色数据
marker_sizes = rand(N, 1) * 100 + 10; % 大小与某个变量成比例
marker_colors = z; % 颜色基于 z 值
figure;
scatter3(x, y, z, marker_sizes, marker_colors, 'filled');
title('3D Scatter Plot');
xlabel('X-value');
ylabel('Y-value');
zlabel('Z-value');
% 添加颜色条以显示颜色所代表的含义
cb = colorbar;
cb.Label.String = 'Z-Value Magnitude';

预期输出: 将显示一个三维散点图,其中包含 100 个填充的圆形标记。每个标记的位置由 x、y 和 z 确定。每个标记的大小不同,其颜色对应于其高度(z 值),如颜色条所示。