三维绘图 #

一、三维曲线 #

1.1 plot3函数 #

matlab
% 基本三维曲线
t = 0:0.1:10*pi;
x = sin(t);
y = cos(t);
z = t;
plot3(x, y, z);

% 多条曲线
plot3(sin(t), cos(t), t, cos(t), sin(t), t);
legend('螺旋线1', '螺旋线2');

% 设置线型
plot3(x, y, z, 'r-', 'LineWidth', 2);

1.2 三维散点图 #

matlab
% scatter3
x = randn(100, 1);
y = randn(100, 1);
z = randn(100, 1);
scatter3(x, y, z, 50, 'filled');

% 带颜色
colors = z;
scatter3(x, y, z, 50, colors, 'filled');
colorbar;

二、三维曲面 #

2.1 meshgrid创建网格 #

matlab
% 创建网格
[X, Y] = meshgrid(-2:0.2:2);

% 计算Z值
Z = X .* exp(-X.^2 - Y.^2);

% 绘制曲面
mesh(X, Y, Z);

2.2 mesh函数 #

matlab
[X, Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);

% 网格图
mesh(X, Y, Z);
title('mesh网格图');

% 带等高线
meshc(X, Y, Z);

% 带帷幕
meshz(X, Y, Z);

2.3 surf函数 #

matlab
[X, Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);

% 曲面图
surf(X, Y, Z);
title('surf曲面图');

% 带等高线
surfc(X, Y, Z);

% 光照效果
surfl(X, Y, Z);
shading interp;
colormap copper;

2.4 曲面属性 #

matlab
[X, Y] = meshgrid(-2:0.2:2);
Z = sin(X) + cos(Y);

s = surf(X, Y, Z);
s.FaceColor = 'interp';     % 插值颜色
s.EdgeColor = 'none';       % 无边线
s.FaceAlpha = 0.8;          % 透明度

shading flat;               % 平面着色
shading interp;             % 插值着色
shading faceted;            % 分面着色(默认)

三、等高线图 #

3.1 二维等高线 #

matlab
[X, Y] = meshgrid(-2:0.1:2);
Z = X.^2 + Y.^2;

% 基本等高线
contour(X, Y, Z);

% 指定等高线数量
contour(X, Y, Z, 20);

% 指定等高线值
contour(X, Y, Z, [1 4 9 16]);

% 填充等高线
contourf(X, Y, Z, 20);
colorbar;

3.2 三维等高线 #

matlab
[X, Y] = meshgrid(-2:0.1:2);
Z = X.^2 + Y.^2;

% 三维等高线
contour3(X, Y, Z, 20);

3.3 标注等高线 #

matlab
[X, Y] = meshgrid(-2:0.1:2);
Z = X.^2 + Y.^2;

[C, h] = contour(X, Y, Z);
clabel(C, h);               % 标注所有等高线
clabel(C, h, [1 4 9]);      % 标注指定等高线

四、特殊三维图形 #

4.1 柱状图 #

matlab
% 三维柱状图
Z = [1 2 3; 4 5 6; 7 8 9];
bar3(Z);

% 水平柱状图
bar3h(Z);

4.2 饼图 #

matlab
data = [30 20 25 15 10];
pie3(data);

4.3 瀑布图 #

matlab
[X, Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);
waterfall(X, Y, Z);

4.4 带状图 #

matlab
[X, Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);
ribbon(Y, Z);

4.5 三维火柴杆图 #

matlab
x = 0:0.5:10;
y = sin(x);
z = cos(x);
stem3(x, y, z);

五、视图控制 #

5.1 视角设置 #

matlab
[X, Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);
surf(X, Y, Z);

% 设置视角
view(45, 30);    % 方位角45度,仰角30度
view(2);         % 二维视图
view(3);         % 三维视图(默认)

% 获取当前视角
[az, el] = view;

5.2 旋转交互 #

matlab
% 开启旋转模式
rotate3d on;

% 关闭
rotate3d off;

5.3 坐标轴设置 #

matlab
surf(X, Y, Z);

% 等比例
axis equal;

% 紧凑
axis tight;

% 隐藏坐标轴
axis off;

% 显示坐标轴
axis on;

% 设置范围
axis([-2 2 -2 2 -1 1]);

六、颜色和光照 #

6.1 颜色映射 #

matlab
[X, Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);
surf(X, Y, Z);

% 内置颜色映射
colormap jet;      % 彩虹色
colormap hot;      % 热色
colormap cool;     % 冷色
colormap parula;   % MATLAB默认
colormap gray;     % 灰度

% 自定义颜色映射
cmap = [linspace(0,1,256)' linspace(0,1,256)' ones(256,1)];
colormap(cmap);

% 显示颜色条
colorbar;

6.2 光照效果 #

matlab
[X, Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);
surf(X, Y, Z);

% 添加光源
light('Position', [1 1 1], 'Style', 'infinite');
lighting gouraud;     % 光照模式: flat, gouraud, phong

% 材质属性
material shiny;       % 光泽: dull, matte, shiny

6.3 透明度 #

matlab
[X, Y] = meshgrid(-2:0.2:2);
Z = X .* exp(-X.^2 - Y.^2);
s = surf(X, Y, Z);

% 设置透明度
s.FaceAlpha = 0.5;    % 半透明
s.FaceAlpha = 'texturemap';
alpha(0.5);           % 全局透明度

七、实用示例 #

7.1 球面 #

matlab
% 方法1:sphere函数
[x, y, z] = sphere(50);
surf(x, y, z);
axis equal;

% 方法2:参数方程
theta = linspace(0, 2*pi, 50);
phi = linspace(0, pi, 50);
[Theta, Phi] = meshgrid(theta, phi);
r = 1;
X = r * sin(Phi) .* cos(Theta);
Y = r * sin(Phi) .* sin(Theta);
Z = r * cos(Phi);
surf(X, Y, Z);
axis equal;

7.2 圆环 #

matlab
% 圆环面
R = 2;    % 大半径
r = 0.5;  % 小半径
theta = linspace(0, 2*pi, 50);
phi = linspace(0, 2*pi, 50);
[Theta, Phi] = meshgrid(theta, phi);

X = (R + r*cos(Phi)) .* cos(Theta);
Y = (R + r*cos(Phi)) .* sin(Theta);
Z = r * sin(Phi);

surf(X, Y, Z);
axis equal;

7.3 多个曲面 #

matlab
figure;
hold on;

% 曲面1
[X1, Y1] = meshgrid(-2:0.2:2);
Z1 = X1.^2 + Y1.^2;
surf(X1, Y1, Z1, 'FaceAlpha', 0.5);

% 曲面2
[X2, Y2] = meshgrid(-2:0.2:2);
Z2 = 4 - X2.^2 - Y2.^2;
surf(X2, Y2, Z2, 'FaceAlpha', 0.5);

hold off;

八、总结 #

本章学习了:

  1. 三维曲线:plot3、scatter3
  2. 三维曲面:mesh、surf、meshc、surfc
  3. 等高线:contour、contourf、contour3
  4. 特殊图形:bar3、pie3、waterfall
  5. 视图控制:view、rotate3d、axis
  6. 颜色光照:colormap、light、alpha

下一章将学习图形属性设置。

最后更新:2026-03-27