Добавить легенду за пределами осей без масштабирования в MATLAB

У меня есть графический интерфейс в MATLAB с предварительно размещенным набором осей. Я использую свойство местоположения легенды, чтобы разместить ее справа от осей. Однако при этом оси масштабируются так, что оси + легенда занимают исходную ширину осей. Есть ли способ обойти изменение размера?

Пример:

x=0:.1:10;
y=sin(x);
figure
pos=get(gca,'position');
pos(3)=.5; %#re-size axes to leave room for legend
set(gca,'position',pos)
plot(x,y)

Пока я получаю:

альтернативный текст

Легенда места:

legend('sin(x)','location','eastoutside')

...аааааа...

альтернативный текст

MATLAB сжимает все это в исходное пространство осей. Как-нибудь обойти это?


person Doresoom    schedule 30.08.2010    source источник


Ответы (1)


ИЗМЕНИТЬ

%# create three axes with custom position
x=0:.1:10;
y=sin(x);
hAx1 = axes('Position',[0.05 0.05 0.7 0.2]); plot(hAx1, x,y)
hAx2 = axes('Position',[0.05 0.4 0.7 0.2]); plot(hAx2, x,y)
hAx3 = axes('Position',[0.05 0.75 0.7 0.2]); plot(hAx3, x,y)

%# add legend to middle one
h = legend(hAx2, 'sin(x)'); pos = get(h,'position');
set(h, 'position',[0.8 0.5 pos(3:4)])

альтернативный текст

person Amro    schedule 30.08.2010
comment
Да, я знаю, что это делается автоматически, но у меня есть три набора осей, расположенных вертикально, которые отображают отдельные наборы данных из одновременного сбора данных. Этикетки представляют собой штампы с датами, поэтому мне нужна только одна легенда. Проблема в том, что когда я добавляю легенду только к центральному графику, два других больше не совпадают. У меня есть пустое место в конце графического интерфейса, где достаточно места для легенды, и я хочу поместить ее туда. - person Doresoom; 30.08.2010
comment
вы всегда можете вручную установить его свойство Position в соответствии с вашим макетом - person Amro; 30.08.2010
comment
@Doresoom: я добавил пример, используя приведенную выше идею. - person Amro; 30.08.2010
comment
Да, я тоже только что заработал - ваше предложение отредактировать свойство position навело меня на правильный путь. - person Doresoom; 30.08.2010
comment
это означает, что ответ на исходный вопрос отрицательный, верно? - person craq; 24.11.2014
comment
@craq: что ты имеешь в виду? Если вы разместите легенду снаружи, MATLAB изменит размер осей, чтобы освободить место для легенды. Если вас не устраивает автоматическая раскладка, вы можете сделать это вручную, как я показал в примере выше. - person Amro; 24.11.2014
comment
@ Амро, извини, я должен был более внимательно изучить твой ответ. При размещении легенды за пределами осей MATLAB неизбежно изменяет размер осей (поэтому я подумал, что ответ отрицательный). Размещая легенду внутри осей, вы избегаете автоматического изменения размера и действительно можете впоследствии свободно перемещать легенду. Я изначально прочитал ваш ответ как ручное исправление автоматического изменения размера hAx2, которое также работает, т.е. изменить последние две строки на это: h = legend(hAx2, 'sin(x)','location','eastoutside'); set(hAx2,'position',[0.05 0.4 0.7 0.2]) - person craq; 25.11.2014