我有一个子图,如下所示:
创建如下:
fig = figure;
nPlots = 3;
for p = 1:nPlots
ax(p) = subplot(1, nPlots, p);
x = 0:10*p;
y1 = max(x)-x.^1.1;
y2 = p*max(x)-2*x;
yyaxis left;
plot(x, y1);
yyaxis right;
plot(x, y2);
end
我希望每一侧的轴分别相同,即我希望所有的图都有:
ylim_left = [0 30];
ylim_right = [0 90];
但如果我使用linkaxes(ax)
,我最终只会改变右侧:
如果我尝试yyaxis left; linkaxes(ax);
,则它会获取左侧的最高值并将其应用于前两个子图的右侧。
当我检查ax时,我注意到它的所有组件ax(1),ax(2)......将YAxisLocation:
属性设置为'right'
,我想这是这个问题的根源。我不确定如何将手柄直接放到子图的左侧和右侧轴上,以直接将它们连接在一起。任何想法都将不胜感激。
答案 0 :(得分:1)
通过提取Y轴的NumericRuler
个孩子,您可以访问左右限制:
>> [ax.YAxis]
ans =
2×3 NumericRuler array:
NumericRuler NumericRuler NumericRuler
NumericRuler NumericRuler NumericRuler
其中第1行是左侧,第2行是右侧。
定义一个辅助函数来同步它们:
function matchyyaxes(ax, ylim_L, ylim_R)
yaxes = [ax.YAxis];
set(yaxes(1,:), 'Limits', ylim_L);
set(yaxes(2,:), 'Limits', ylim_R);
end
您可以将其与样本限制一起使用:
matchyyaxes(ax, [0 30], [0 90]);
您还可以创建自己的property listener来模仿linkaxes
答案 1 :(得分:0)