文章目录
-
- 一、三维绘图前期准备:数据生成与基础工具
- 二、plot3():绘制三维线图
-
- [1. 基本语法](#1. 基本语法)
- [2. 实战实例:绘制三维螺旋线](#2. 实战实例:绘制三维螺旋线)
- 三、mesh():绘制三维网格图
-
- [1. 基本语法](#1. 基本语法)
- [2. mesh与plot3的区别](#2. mesh与plot3的区别)
- [3. 实战实例:绘制peaks函数网格图](#3. 实战实例:绘制peaks函数网格图)
- 四、surf():绘制三维曲面图
-
- [1. 基本语法](#1. 基本语法)
- [2. surf与mesh的区别](#2. surf与mesh的区别)
- [3. 实战实例:绘制peaks函数彩色曲面图](#3. 实战实例:绘制peaks函数彩色曲面图)
- 五、contour():绘制等高线图
-
- [1. 基本语法](#1. 基本语法)
- [2. 实战实例:peaks函数等高线图](#2. 实战实例:peaks函数等高线图)
- 六、三维绘图进阶技巧
在科学计算、工程仿真和数据可视化领域,MATLAB凭借强大的绘图功能成为从业者的首选工具之一。三维绘图能够直观展现数据在三维空间中的分布规律和几何特征,而 plot3()、 mesh()、 surf()和 contour()是MATLAB中最核心的三维绘图函数,分别适用于三维线图、网格图、曲面图和等高线图的绘制。
一、三维绘图前期准备:数据生成与基础工具
1.MATLAB下载安装教程
MATLAB下载安装教程(附安装包): https://blog.csdn.net/tyatyatya/article/details/147879353
2.MATLAB三维绘图函
在使用三维绘图函数前,首先需要生成三维空间的坐标数据。MATLAB中常用linspace()生成等间距向量,用meshgrid()将一维向量转换为二维网格矩阵,这是绘制三维图形的基础步骤。
linspace(a, b, n):在区间[a,b]生成n个等间距的数值;meshgrid(x, y):将一维向量x、y转换为二维网格矩阵X、Y,其中X的每行都是x,Y的每列都是y。
示例代码:
matlab
% 生成x轴和y轴的等间距向量
x = linspace(-2*pi, 2*pi, 100);
y = linspace(-pi, pi, 100);
% 转换为二维网格矩阵
[X, Y] = meshgrid(x, y);
二、plot3():绘制三维线图
plot3()是MATLAB中绘制三维折线/曲线的基础函数,适用于展示三维空间中数据点的连续变化趋势,比如运动轨迹、时间序列的三维关联等。
1. 基本语法
matlab
plot3(X, Y, Z)
plot3(X, Y, Z, LineSpec)
plot3(X, Y, Z, 'PropertyName', PropertyValue)
X、Y、Z:可以是长度相同的一维向量(绘制单条曲线),也可以是同维度的矩阵(绘制多条曲线);LineSpec:可选参数,用于指定线条样式、标记符号和颜色,如'r--o'表示红色虚线+圆形标记;PropertyName:可选属性,如LineWidth(线宽)、MarkerSize(标记大小)等。
2. 实战实例:绘制三维螺旋线
三维螺旋线是典型的三维曲线案例,其数学表达式为x=cos(t)、y=sin(t)、z=t,具体实现代码如下:
matlab
% 生成参数t的取值
t = 0:0.1:10*pi;
% 计算三维坐标
x = cos(t);
y = sin(t);
z = t;
% 绘制三维螺旋线
plot3(x, y, z, 'b-', 'LineWidth', 2);
% 添加坐标轴标签和标题
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
title('三维螺旋线');
% 显示网格
grid on;
% 开启坐标轴等比例
axis equal;
代码说明:
grid on:显示网格线,增强图形的空间感;axis equal:设置三个坐标轴的刻度比例一致,避免图形变形;xlabel/ylabel/zlabel:为坐标轴添加标签,提升图形可读性。
运行后将得到沿Z轴上升的螺旋曲线,清晰展现三维空间中曲线的连续变化。
三、mesh():绘制三维网格图
mesh()函数用于绘制三维网格图,通过线条的交叉构成网格面,侧重展示三维曲面的拓扑结构,适合观察数据的整体分布趋势,而不强调曲面的填充效果。
1. 基本语法
matlab
mesh(X, Y, Z)
mesh(X, Y, Z, C)
mesh(..., 'PropertyName', PropertyValue)
X、Y、Z:必须是同维度的二维矩阵,Z表示网格点的高度值;C:可选参数,用于指定网格的颜色映射,默认与Z的数值关联;- 常用属性:
EdgeColor(网格线颜色)、FaceAlpha(透明度,仅对后续版本有效)等。
2. mesh与plot3的区别
plot3()绘制的是线,数据维度为一维向量或按列/行的矩阵;mesh()绘制的是网格面,数据必须是二维矩阵,展现的是整个曲面的轮廓。
3. 实战实例:绘制peaks函数网格图
MATLAB内置的peaks()函数是一个经典的三维测试函数,其表达式包含多个高斯分布的叠加,适合用于三维绘图演示。
matlab
% 生成网格数据
[x, y] = meshgrid(-3:0.1:3, -3:0.1:3);
% 计算peaks函数的z值
z = peaks(x, y);
% 绘制三维网格图
mesh(x, y, z);
% 添加标签和标题
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
title('peaks函数三维网格图');
% 开启颜色条
colorbar;
代码说明:colorbar会显示颜色与Z值的对应关系,帮助直观判断曲面的高度变化。
四、surf():绘制三维曲面图
surf()函数与mesh()语法类似,但它会对网格之间的区域进行颜色填充,更适合展示三维曲面的细节和连续的颜色渐变,视觉效果比网格图更丰富。
1. 基本语法
matlab
surf(X, Y, Z)
surf(X, Y, Z, C)
surf(..., 'PropertyName', PropertyValue)
参数含义与mesh()一致,核心区别在于surf()会填充网格的面,而mesh()仅绘制网格线。
2. surf与mesh的区别
mesh():仅显示网格线,无面填充,突出曲面的框架结构;surf():填充网格面,颜色可随高度或自定义参数变化,更适合展示曲面的连续特征。
3. 实战实例:绘制peaks函数彩色曲面图
在surf()中可通过shading函数调整颜色渲染方式,shading interp表示插值着色,使颜色过渡更平滑。
matlab
% 生成网格数据
[x, y] = meshgrid(-3:0.1:3, -3:0.1:3);
% 计算peaks函数的z值
z = peaks(x, y);
% 绘制三维曲面图
surf(x, y, z);
% 设置插值着色
shading interp;
% 添加标签、标题和颜色条
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
title('peaks函数三维曲面图');
colorbar;
% 设置视角(方位角30°,仰角45°)
view(30, 45);
代码说明:view(az, el)用于调整图形的观察视角,az是方位角(绕Z轴的旋转角度),el是仰角(与XY平面的夹角)。
五、contour():绘制等高线图
contour()函数用于绘制二维等高线图,而contour3()可绘制三维等高线图,二者均通过等高线的疏密和数值,反映三维曲面在XY平面上的高度分布特征,广泛应用于地形分析、气压分布等场景。
1. 基本语法
(1)二维等高线contour()
matlab
contour(X, Y, Z)
contour(X, Y, Z, n)
contour(X, Y, Z, v)
n:指定等高线的条数;v:一维向量,指定等高线的高度值,如v=[-2, 0, 2]仅绘制高度为-2、0、2的等高线。
(2)三维等高线contour3()
matlab
contour3(X, Y, Z, n)
参数与contour()一致,只是将等高线绘制在三维空间中对应的高度位置。
2. 实战实例:peaks函数等高线图
分别绘制二维和三维等高线,对比展示高度分布:
matlab
% 生成网格数据
[x, y] = meshgrid(-3:0.1:3, -3:0.1:3);
z = peaks(x, y);
% 绘制二维等高线图(子图1)
subplot(1,2,1);
contour(x, y, z, 15); % 绘制15条等高线
xlabel('X轴');
ylabel('Y轴');
title('peaks函数二维等高线');
colorbar;
grid on;
% 绘制三维等高线图(子图2)
subplot(1,2,2);
contour3(x, y, z, 15);
xlabel('X轴');
ylabel('Y轴');
zlabel('Z轴');
title('peaks函数三维等高线');
colorbar;
grid on;
代码说明:subplot(m,n,p)用于将绘图窗口分为m行n列,并在第p个位置绘制图形,方便对比不同绘图效果。
六、三维绘图进阶技巧
- 视角调整 :除了
view(az, el),还可以使用rotate3d on开启交互式视角旋转,用鼠标拖动即可调整观察角度; - 颜色映射 :通过
colormap函数设置颜色方案,如colormap jet(彩虹色)、colormap gray(灰度)、colormap cool(冷色调); - 透明度设置 :对
surf()绘制的曲面,可通过alpha(0.5)设置透明度(0为完全透明,1为不透明); - 图形标注 :使用
text(x, y, z, '标注内容')在三维空间指定位置添加文本标注,用legend()添加图例。