Matlab: как выровнять оси вложенных диаграмм, если одна из них содержит панель цветов?


Минимальный пример:

[x,y,z] = peaks(50);
figure;
subplot(5,1,1:4);
pcolor(x,y,z);
shading flat;
colorbar;
subplot(5,1,5);
plot(x(end/2,:), z(end/2,:));

выход

В этом примере я хотел бы, чтобы нижний подзаголовок показывал поперечное сечение пиков вдоль y=0 и график заканчивался в той же позиции, что и подзаголовок pcolor, так что Х-тики находятся на одинаковых позициях. На самом деле, тогда мне не нужна дублирующая ось X. Итак,

Как изменить масштаб Нижнего подзаголовка таким образом, чтобы правый предел совпадал с правым пределом верхней части сюжета? (желательно такой, чтобы цветовая панель могла быть включен / выключен, не разрушая это выравнивание)

(к вашему сведению, я узнал я могу использовать команду linkaxes , чтобы иметь правильное поведение масштабирования на втором шаге)

1 12

1 ответ:

Вы можете просто установить ширину второго подзаголовка на ширину первого, изменив свойство Position.

[x,y,z] = peaks(50);
figure;
ah1 = subplot(5,1,1:4); %# capture handle of first axes
pcolor(x,y,z);
shading flat;
colorbar;
ah2 = subplot(5,1,5); %# capture handle of second axes
plot(x(end/2,:), z(end/2,:));

%# find current position [x,y,width,height]
pos2 = get(ah2,'Position');
pos1 = get(ah1,'Position');

%# set width of second axes equal to first
pos2(3) = pos1(3);
set(ah2,'Position',pos2)

Затем вы можете дополнительно манипулировать своими свойствами осей, например, вы можете повернуть x-метки на первом графике и переместить вторую так, чтобы они соприкасались:

set(ah1,'XTickLabel','')
pos2(2) = pos1(2) - pos2(4);
set(ah2,'Position',pos2)

Введите описание изображения здесь