Matlab: Как выровнять оси вспомогательных участков, если одна из них содержит цветовую панель? - PullRequest
12 голосов
/ 10 марта 2011

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

[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,:));

output

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

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

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

1 Ответ

15 голосов
/ 10 марта 2011

Вы можете просто установить ширину второго подзаговора равной ширине первого, изменив свойство 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)

enter image description here

...