[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
对象(Axes
,NumericRuler
,XAxis
)的YAxis
和ZAxis
属性,我们可以将辅助轴放置在所需的位置。
下面的示例说明了基本思想。这是针对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 时,此基本示例会失效。您需要添加一些将两个轴链接在一起的方法,以解决此问题。
结果将是: