如何在 MATLAB 中绘制三维线图?

1 阅读5分钟

在 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