You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MATLAB中绘制双X/Y/Z轴3D图问题:yyaxis函数无法使用

3D图实现双X/Y/Z轴(双坐标系)的MATLAB解决方案

你的核心需求是在同一张3D图中用双坐标系(双X/Y/Z轴)分别绘制不同曲面,原代码的问题在于两个坐标系未同步视图属性,旋转时会出现错位,且轴元素显示混乱。以下是修正后的实现方案:

修正代码

close; clc; clear;

% 生成数据
x = linspace(-2, 2, 50);
y = linspace(-2, 2, 50);
[X, Y] = meshgrid(x, y);
Z1 = sin(X) .* cos(Y);
Z2 = X.^2 + Y.^2;

% 创建第一个坐标系(主坐标系)
figure;
ax1 = gca;
surf(ax1, X, Y, Z1, 'FaceColor', 'blue', 'FaceAlpha', 0.7);
hold(ax1, 'on');
xlabel(ax1, 'X1');
ylabel(ax1, 'Y1');
zlabel(ax1, 'Z1');
title('双坐标系3D曲面图');

% 创建第二个坐标系(叠加透明坐标系)
ax2 = axes('Position', get(ax1, 'Position'), 'Color', 'none');
% 设置第二个轴的位置和方向
set(ax2, 'XAxisLocation', 'top', 'YAxisLocation', 'right', 'ZDir', 'reverse');
% 同步两个坐标系的视图、缩放等属性,防止旋转错位
linkprop([ax1, ax2], {'CameraPosition', 'CameraTarget', 'CameraUpVector', 'XLim', 'YLim'});
% 在第二个坐标系绘制曲面
surf(ax2, X, Y, Z2, 'FaceColor', 'red', 'FaceAlpha', 0.7);
hold(ax2, 'on');
% 设置第二个轴的标签
xlabel(ax2, 'X2');
ylabel(ax2, 'Y2');
zlabel(ax2, 'Z2');

% 统一视图角度
view(3);
hold off;

关键修正点说明

  • 同步坐标系属性:用linkprop绑定两个坐标系的相机位置、目标、上向量及X/Y范围,确保旋转或缩放时两个坐标系完全对齐,不会出现错位。
  • 透明坐标系:第二个坐标系设置Color='none',避免遮挡第一个曲面,同时保留轴元素。
  • 轴位置与方向:通过XAxisLocation/YAxisLocation将第二个轴移到顶部/右侧,ZDir='reverse'反转Z轴方向,实现双轴区分。
  • 曲面透明度:给两个曲面设置FaceAlpha,可以同时看到两个曲面的重叠部分,增强可视化效果。

扩展说明

如果两个曲面的X/Y/Z范围不同,只需单独设置对应坐标系的XLim/YLim/ZLim即可,比如:

% 假设Z2的范围是0到8,单独设置ax2的Z轴范围
set(ax2, 'ZLim', [0, 8]);

内容的提问来源于stack exchange,提问作者user24930120

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 13:57:51