我正在尝试将具有不同单位的辅助y轴添加到3D图中。
matlab - Matlab 3D图中的次要y轴(冲浪,网格,冲浪)-LMLPHP

[m2_array, ~ , ~] = F_readBin('amb.bin');
amb = m2_array(:,:,lat);

surfc(light,'LineWidth',0.001);
ylim([1 24]); xlim([1 size(light,2)]); title(['@ ',num2str(lat),'°N']);
xticks([0:50:size(m2_array,2)]);
labels=cellstr(num2str((day_start:50:day_end)')); xticklabels(labels);
xlabel('Season days'); ylabel('Daytime{[hours]}');zlabel('surface light
[\mumol m^2 s^-^1]')
colormap winter;

但是,我可以找到的所有解决方案例如yyaxis似乎仅适用于2D图。
有没有可以处理冲浪,网格,冲浪图的工作?

最佳答案

不确定这是否是您要寻找的东西,但是我想将辅助轴添加到3D绘图的基本方法与2D相同(据我所知,matlab中的2D绘图只是查看的3D绘图从上面)。

想法是将第二组 Axis 放置在第一组 Axis 的上方,然后对其进行调整以适合您的要求,例如通过隐藏未使用的 Axis 并使辅助背景透明。在Matlab文档here中对此进行了说明。

对于3D,由于默认的 Axis 和标签位置,这有点棘手,但这就是undocumentedmatlab的作用所在。使用FirstCrossOverValue'SecondCrossoverValue对象(AxesNumericRulerXAxis)的YAxisZAxis属性,我们可以将辅助轴放置在所需的位置。

下面的示例说明了基本思想。这是针对z轴的,但是对于y或x可以使用相同的方法。

clear; close all; clc

% Dummy data from matlab example
[X,Y,Z] = peaks(25);

% Primary axes with some arbitrary viewpoint and labels
hs = surf(X,Y,Z); % Get surface object
ha = hs.Parent; % Get parent Axes
ha.View = [25, 40]; % Set arbitrary view point
xlabel 'xa';
ylabel 'ya';
zlabel 'za';
grid on

% Secondary axes on top of primary, using same view point
hb = axes('view',ha.View);
hb.ZLim = [0 7]; % Arbitrary axis limits
zlabel 'zb';

% Hide secondary background and x and y rulers
hb.Color = 'none'; % Transparent background
hb.XAxis.Visible = 'off';
hb.YAxis.Visible = 'off';

% Move z-ruler to opposite corner (from undocumentedmatlab)
hb.ZAxis.FirstCrossoverValue = 1; % x-location of z-ruler [normalized]
hb.ZAxis.SecondCrossoverValue = 1; % y-location of z-ruler [normalized]

请注意,当您开始手动旋转 Axis 或放大或缩小 Axis 时,此基本示例会失效。您需要添加一些将两个轴链接在一起的方法,以解决此问题。

结果将是:
matlab - Matlab 3D图中的次要y轴(冲浪,网格,冲浪)-LMLPHP

10-08 05:37
查看更多