2010-08-30 14 views
13

Mam GUI w MATLAB z wstępnie ustawionym zestawem osi. Używam właściwości położenia legendy, aby umieścić ją po prawej stronie osi. Jednak w ten sposób osie są ponownie skalowane, tak że osie + legenda zajmują pierwotną szerokość osi. Czy istnieje sposób na obejście zmiany rozmiaru?Dodaj legendę poza osiami bez przeskalowywania w MATLAB

Przykład:

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) 

Do tej pory mam:

alt text

Place legenda:

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

... aaaaand ...

alt text

MATLAB przycina wszystko do oryginalnej przestrzeni osi. Jakikolwiek sposób obejścia tego?

Odpowiedz

8

EDIT

%# 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)]) 

alt text

+0

Tak, wiem, to zrobić automatycznie, ale mam trzy zestawy osiach ułożonych pionowo które działka oddzielne zestawy danych z jednoczesnym nabyciu. Etykiety są datownikami, więc potrzebuję tylko jednej legendy. Problem polega na tym, że dodaję legendę tylko do środkowej działki, a pozostałe dwie nie są już ustawione. Na końcu GUI mam pustą przestrzeń z wystarczającą ilością miejsca na legendę i chcę ją tam umieścić. – Doresoom

+1

zawsze możesz ręcznie ustawić jego właściwość 'Position', aby dopasować swój układ – Amro

+0

@Doresoom: Dodałem przykład używając powyższego pomysłu. – Amro