在 MATLAB 中绘制三维线图(plot3)是可视化三维曲线/轨迹的核心方法,比如展示运动路径、三维函数曲线、时间序列的三维关联等。我会从「基础绘制→样式美化→实战案例」逐步讲解,所有代码可直接运行,覆盖新手必备的场景和技巧。
一、三维线图核心原理
三维线图的核心函数是 plot3(),语法和二维 plot() 高度相似,仅多了一个Z轴参数:
plot3(X, Y, Z, 样式参数);
X/Y/Z:可以是等长的一维数组(最常用),也可以是同维度矩阵;- 样式参数:支持颜色、线宽、标记点等,和二维
plot完全兼容。
二、基础三维线图(快速上手)
先从最简单的三维螺旋线示例入手,掌握核心用法:
% ==================== 基础三维线图:螺旋线 ====================
% 1. 生成数据(参数化三维曲线)
t = linspace(0, 10*pi, 500); % 生成500个等距点(0到10π)
x = cos(t); % X轴:余弦曲线
y = sin(t); % Y轴:正弦曲线
z = t/2; % Z轴:线性增长(形成螺旋)
% 2. 绘制三维线图
figure('Name', '基础三维螺旋线'); % 命名窗口
plot3(x, y, z, ...
'Color', [0.2 0.6 0.8], ... % 自定义RGB颜色(蓝绿色)
'LineWidth', 2); % 线宽2(更清晰)
% 3. 基础美化(必做)
xlabel('X = cos(t)', 'FontSize', 12); % X轴标签
ylabel('Y = sin(t)', 'FontSize', 12); % Y轴标签
zlabel('Z = t/2', 'FontSize', 12); % Z轴标签
title('三维螺旋线(基础版)', 'FontSize', 14);
grid on; % 显示网格(增强三维感)
axis equal; % 等比例坐标轴(避免变形)
view(45, 30); % 自定义视角:方位角45°,仰角30°
三、进阶:美化与个性化三维线图
基础绘图后,通过样式定制、标记点、多曲线叠加等技巧提升图表专业度:
% ==================== 进阶三维线图:多曲线+标记点 ====================
% 1. 生成两组三维曲线数据
t = linspace(0, 6*pi, 300);
% 曲线1:顺时针螺旋
x1 = cos(t);
y1 = sin(t);
z1 = t/3;
% 曲线2:逆时针螺旋
x2 = cos(-t);
y2 = sin(-t);
z2 = t/3;
% 2. 绘制多曲线三维线图
figure('Position', [100, 100, 800, 600]); % 自定义窗口大小(左、下、宽、高)
% 绘制第一条曲线(带标记点)
plot3(x1, y1, z1, ...
'Color', '#FF6B6B', ... % 十六进制颜色(珊瑚红)
'LineWidth', 1.5, ...
'Marker', 'o', ... % 标记点形状(圆圈)
'MarkerSize', 4, ... % 标记点大小
'MarkerFaceColor', 'white', ... % 标记点填充色
'MarkerEdgeColor', '#FF6B6B', ...% 标记点边框色
'DisplayName', '顺时针螺旋');
hold on; % 保留当前图,叠加第二条曲线
% 绘制第二条曲线
plot3(x2, y2, z2, ...
'Color', '#4ECDC4', ... % 青绿色
'LineWidth', 1.5, ...
'Marker', '^', ... % 三角形标记
'MarkerSize', 4, ...
'MarkerFaceColor', 'white', ...
'MarkerEdgeColor', '#4ECDC4', ...
'DisplayName', '逆时针螺旋');
% 3. 高级美化
xlabel('X 轴', 'FontSize', 12, 'FontName', 'Microsoft YaHei'); % 中文支持
ylabel('Y 轴', 'FontSize', 12, 'FontName', 'Microsoft YaHei');
zlabel('Z 轴', 'FontSize', 12, 'FontName', 'Microsoft YaHei');
title('双螺旋三维线图(美化版)', 'FontSize', 14, 'FontName', 'Microsoft YaHei');
% 坐标轴优化
axis([-1.2 1.2 -1.2 1.2 0 6*pi/3]); % 固定坐标轴范围
grid on; grid minor; % 显示主网格+细网格
set(gca, 'Color', [0.98 0.98 0.98]); % 坐标轴背景色(浅灰)
% 图例与视角
legend('Location', 'best', 'FontSize', 10, 'FontName', 'Microsoft YaHei');
view(30, 40); % 调整视角(方位角30°,仰角40°)
% 4. 保存高分辨率图片
print(gcf, '三维双螺旋线图.png', '-dpng', '-r300'); % 300dpi,PNG格式
hold off;
四、实战案例:三维轨迹可视化
三维线图最典型的应用是轨迹可视化,比如模拟无人机飞行路径:
% ==================== 实战:无人机三维飞行轨迹 ====================
% 1. 生成模拟轨迹数据(含爬升、平飞、下降阶段)
% 时间序列
t = linspace(0, 60, 1000); % 60秒,1000个采样点
% 爬升阶段(0-20秒)
t1 = t(t<=20);
x1 = 0.5*t1; % X轴匀速前进
y1 = 0.3*t1; % Y轴匀速侧移
z1 = 0.2*t1.^2; % Z轴加速爬升
% 平飞阶段(20-40秒)
t2 = t(t>20 & t<=40);
x2 = 0.5*20 + 0.8*(t2-20);
y2 = 0.3*20 + 0.4*(t2-20);
z2 = 0.2*20^2 * ones(size(t2)); % 高度不变
% 下降阶段(40-60秒)
t3 = t(t>40);
x3 = x2(end) + 0.6*(t3-40);
y3 = y2(end) + 0.2*(t3-40);
z3 = z2(end) - 0.1*(t3-40).^2; % 减速下降
% 合并轨迹
x = [x1, x2, x3];
y = [y1, y2, y3];
z = [z1, z2, z3];
% 2. 绘制轨迹图
figure('Name', '无人机三维飞行轨迹');
plot3(x, y, z, 'Color', '#2A9D8F', 'LineWidth', 2);
hold on;
% 标记关键节点(起点、平飞起点、终点)
scatter3(x(1), y(1), z(1), 100, 'red', 'filled', 'DisplayName', '起点');
scatter3(x2(1), y2(1), z2(1), 100, 'orange', 'filled', 'DisplayName', '平飞起点');
scatter3(x(end), y(end), z(end), 100, 'purple', 'filled', 'DisplayName', '终点');
% 3. 美化
xlabel('X 位置 (m)', 'FontSize', 12);
ylabel('Y 位置 (m)', 'FontSize', 12);
zlabel('Z 高度 (m)', 'FontSize', 12);
title('无人机三维飞行轨迹', 'FontSize', 14);
grid on;
legend('Location', 'best');
view(45, 25); % 合适的视角
hold off;
五、关键技巧与问题解决
1. 常用样式参数速查
| 参数名 | 作用 | 示例值 |
|---|---|---|
Color | 线条颜色 | 'red'/[0.2 0.6 0.8]/#FF6B6B |
LineWidth | 线宽 | 2(默认1) |
Marker | 标记点形状 | 'o'(圆)/'^'(三角)/'*'(星) |
MarkerSize | 标记点大小 | 4(默认6) |
MarkerFaceColor | 标记点填充色 | 'white'/[1 0 0] |
2. 视角调整(view)
view(az, el):az=方位角(绕Z轴旋转,0=正前方,90=右侧),el=仰角(与XY平面夹角,0=俯视,90=正视);- 快捷方式:
view(3)=默认3D视角,view(2)=切换到2D俯视图。
3. 中文乱码解决
如果三维线图中中文标签乱码,添加全局字体设置:
set(0, 'DefaultAxesFontName', 'Microsoft YaHei'); % 坐标轴字体
set(0, 'DefaultTextFontName', 'Microsoft YaHei'); % 标题/图例字体
4. 动态三维线图(可选)
如果需要展示轨迹的生成过程,用animatedline结合plot3:
% 动态绘制三维螺旋线
figure('Name', '动态三维线图');
h = animatedline('Color', '#FF6B6B', 'LineWidth', 2);
xlabel('X'); ylabel('Y'); zlabel('Z');
title('动态绘制三维螺旋线');
axis([-1.2 1.2 -1.2 1.2 0 5*pi]);
grid on;
t = linspace(0, 10*pi, 500);
for i = 1:length(t)
x = cos(t(i));
y = sin(t(i));
z = t(i)/2;
addpoints(h, x, y, z); % 逐点添加
drawnow; % 刷新画面
pause(0.01); % 控制速度
end