2012-05-18 8 views
10

Powiedzmy mamy poletko 1-by-2 i wykreślić niektóre grafiki wewnątrz następująco:Jak utrzymać subplot rozmiary niezmienione po oddanie colorbar

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

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

enter image description here

a potem chcesz umieścić colorbar:

colorbar 

enter image description here

I don nie chcesz, aby odpowiednia postać była sparaliżowana jak w wyniku. W jaki sposób możemy odłożyć pasek koloru z prawej figury w rzędzie subplotów i zachować niezmienione rozmiary?

Uwaga: w rzeczywistości potrzebuję go do wykreślania obrazów, w których pasek kolorów jest popularny i chcę umieścić go po prawej stronie. Użyłem tego zabawkowego przykładu dla prostoty.

Odpowiedz

13

Można po prostu wyodrębnić pozycję pierwszego wykresu i użyć go na drugim. MATLAB automatycznie przesuwa pasek koloru w prawo podczas przeskalowywania.

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

+0

Świetnie! Automatyczne rozwiązanie jest lepsze, ale brutalna siła pozwala mi zmniejszyć odstęp między poletkami, tak aby był równy odstępowi pomiędzy prawym polem a kolorowym paskiem. Dzięki za zapewnienie dwóch dobrych sposobów. – petrichor

1

To jest właśnie to, czego szukałem. Po wdrożeniu Vidar's automatic solution wpadłem na uproszczenie. Zdobądź pozycję skrajnie prawych osi PRZED dodaniem paska kolorów, a następnie po prostu zresetuj ściśniętą pozycję do oryginału:

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); 
+0

Próbowałem, ale etykiety paska kolorów wydają się znajdować poza działką. – petrichor

Powiązane problemy