MATLAB 三维绘图函数¶
MATLAB 提供了极其强大的三维可视化能力,能够将复杂的数据集、数学函数和模型以直观的三维形式呈现。这些功能广泛应用于科学、工程、金融和数据分析等领域。
核心辅助函数:meshgrid
在绘制大多数三维曲面图时,您需要先从定义域向量 x 和 y 创建出网格坐标矩阵 X 和 Y。[X, Y] = meshgrid(x, y) 是实现这一目标的关键函数。它为定义域中的每个点生成了完整的 (X, Y) 坐标对,以便计算对应的高度值 Z。
三维线图与散点图¶
plot3 - 绘制三维空间中的线图¶
-
功能
plot3是二维plot函数在三维空间的直接扩展。它通过连接一系列(x, y, z)数据点来创建一条或多条空间曲线。 -
语法
-
核心参数说明
x,y,z: 包含数据点三维坐标的数值向量,它们必须具有相同的长度。LineSpec: 与plot类似,用于快速设置线条样式、标记和颜色的短字符串(如'--ro')。'Name', Value(名称-值对): 用于更精细地设置线条属性,如'LineWidth','Color','Marker'等。
-
示例
scatter3 - 绘制三维空间中的散点图¶
-
功能 在三维空间中绘制散点图。与
plot3不同,它将每个数据点显示为独立的标记。其强大之处在于可以为每个点独立地设置大小和颜色,非常适合展示四维或五维数据。 -
语法
-
核心参数说明
sz: 指定标记的面积。可以是一个标量(所有点同样大小),也可以是一个向量(为每个点指定不同的大小)。c: 指定标记的颜色。可以是一个颜色名称或 RGB 三元组(所有点同样颜色),也可以是一个向量(此时会根据向量中的值,使用当前的颜色图 Colormap 为每个点着色)。
-
示例
% 创建 200 个随机数据点 x = randn(200, 1); y = randn(200, 1); z = x.^2 + y.^2 + randn(200, 1); % 用 z 值的大小来决定每个点的大小 sizes = (z - min(z) + 10) * 10; % 用 z 值来决定每个点的颜色 colors = z; figure; scatter3(x, y, z, sizes, colors, 'filled', 'MarkerFaceAlpha', 0.8); title('scatter3 示例:用大小和颜色表示第四、五维度'); xlabel('X'); ylabel('Y'); zlabel('Z'); colorbar; % 显示颜色条
曲面图与网格图¶
surf - 创建着色的三维曲面图¶
-
功能
surf是可视化形如 \(z = f(x, y)\) 的二元函数的首选工具。它创建一个三维着色曲面图,其中曲面的高度由矩阵Z定义,颜色也默认由Z的值决定。 -
语法
-
核心参数说明
X,Y: 定义 x-y 平面网格的坐标矩阵,通常由meshgrid生成。Z: 一个与X和Y同等大小的矩阵,定义了在每个(X, Y)点上的曲面高度。C: 一个与Z同等大小的矩阵,用于独立控制曲面上每个点的颜色。如果省略,则C = Z。'EdgeColor','FaceColor','FaceAlpha': 常用的名称-值对,分别控制网格线颜色、曲面颜色和曲面透明度。
-
示例
mesh - 创建三维网格图(线框图)¶
-
功能
mesh的功能与surf非常相似,但它创建一个线框式的网格图。曲面本身是透明的,只有网格线被着色。这有助于观察曲面的底层结构。 -
语法
-
示例
surfc 和 meshc - 带等高线的曲面/网格图¶
-
功能
surfc和meshc分别是surf和mesh的变体。它们在绘制三维图形的同时,会在 xy 平面的底部额外绘制出该曲面的等高线图。 -
语法
-
示例
其他三维图形¶
bar3 - 创建三维垂直柱状图¶
-
功能 将一个矩阵
Y中的每个元素绘制为一个三维的垂直柱子,柱子的高度由元素的值决定。常用于比较两个分类变量下的数据。 -
语法
-
示例
stem3 - 绘制三维离散序列茎叶图¶
-
功能
stem函数的三维版本。它在 xy 平面的指定位置上,绘制延伸到z高度的“火柴杆”。 -
语法
-
示例
pie3 - 创建三维饼图¶
-
功能 创建具有三维效果的饼图。其数据处理和二维
pie函数完全相同,主要是为了美观和视觉效果。 -
语法
-
示例
contour3 - 创建三维空间中的等高线图¶
-
功能 与二维
contour不同,contour3将等高线绘制在它们各自对应的 Z 高度上,从而在三维空间中展示等高线。 -
语法
-
示例
fill3 - 填充三维多边形¶
-
功能 创建并填充一个由
(x, y, z)顶点定义的三维多边形。 -
语法
-
示例
% 定义一个金字塔的四个三角形面 % 顶点 v = [0 0 1; 1 -1 0; 1 1 0; -1 1 0; -1 -1 0]; % 面 (由顶点的索引定义) f = [1 2 3; 1 3 4; 1 4 5; 1 5 2]; figure; patch('Vertices', v, 'Faces', f, 'FaceVertexCData', hsv(4), 'FaceColor', 'flat'); % 这里使用更底层的 patch 函数,fill3 是其一个简化接口 title('fill3/patch 示例:绘制一个彩色金字塔'); view(3); % 设置为标准三维视角 axis equal;
体数据与向量场可视化¶
slice - 在三维体数据中显示切片¶
-
功能 可视化三维体数据( volumetric data, \(v = f(x, y, z)\))的内部结构。它通过在指定的平面上对体数据进行切片并着色来工作。
-
语法
-
示例
isosurface - 创建体数据的等值面¶
-
功能 计算并绘制三维体数据中的等值面。等值面是连接三维空间中所有具有相同数值的点的曲面。
-
语法
-
示例
% 创建一个三维体数据 [X, Y, Z] = meshgrid(-3:0.2:3); V = (X.^2 + (9/4)*Y.^2 + Z.^2 - 1).^3 - X.^2.*Z.^3 - (9/80)*Y.^2.*Z.^3; figure; p = patch(isosurface(X, Y, Z, V, 0)); % 提取 V=0 的等值面 % 设置外观 p.FaceColor = 'red'; p.EdgeColor = 'none'; daspect([1 1 1]); view(3); camlight; lighting gouraud; title('isosurface 示例:心形等值面');
quiver3 - 绘制三维向量场(箭头图)¶
-
功能 在三维空间中的
(x, y, z)位置,绘制方向和大小由(u, v, w)分量决定的箭头。 -
语法
-
示例