Вопрос по matlab – Как сохранить размеры подплота неизменными после установки цветовой шкалы

10

Допустим, у нас есть подзаговор 1 на 2, и мы отображаем некоторые графики внутри следующим образом:

subplot(1,2,1)
surf(peaks(20))

subplot(1,2,2)
surf(peaks(20))

enter image description here

И тогда мы хотим поставить colorbar:

colorbar

enter image description here

Я не хочу, чтобы правильная фигура сжималась, как в результате. Как мы можем поместить цветную полосу из самой правой фигуры в ряду вспомогательных участков и оставить размеры их неизменными?

Примечание. На самом деле он мне нужен для построения изображений, где цветовая полоса является общей, и я хочу поставить ее справа. Я использовал этот игрушечный пример для простоты.

Ваш Ответ

2   ответа
2

Автоматическое решение Vidar Я придумал упрощение. Получите положение крайних правых осей ДО добавления цветовой шкалы, а затем просто сбросьте сжатую позицию до исходного:

f1=figure(1);clf;
s1=subplot(1,2,1);
surf(peaks(20));

s2=subplot(1,2,2);
surf(peaks(20));
s2Pos = get(s2,'position');

hb = colorbar('location','eastoutside');
set(s2,'position',s2Pos);
Error: User Rate Limit Exceeded petrichor
13

ом. MATLAB автоматически перемещает цветную полосу вправо при изменении масштаба.

f1=figure(1);clf;
s1=subplot(1,2,1);
surf(peaks(20));

s2=subplot(1,2,2);
surf(peaks(20));
hb = colorbar('location','eastoutside');

%% # Solution:
s1Pos = get(s1,'position');
s2Pos = get(s2,'position');
s2Pos(3:4) = [s1Pos(3:4)];
set(s2,'position',s2Pos);



%% # Alternative method. Brute force placement
set(s1,'Units','normalized', 'position', [0.1 0.2 0.3 0.6]);
set(s2,'Units','normalized', 'position', [0.5 0.2 0.3 0.6]);
set(hb,'Units','normalized', 'position', [0.9 0.2 0.05 0.6]);

enter image description here

Error: User Rate Limit Exceeded petrichor

Похожие вопросы