2012-05-18 13 views
10

は、私たちが1行2サブプロットを持っており、私たちは次のように内部の一部のグラフィックスをプロットしましょうカラーバーを入れた後、そのままサイズのサブプロットを保つために:どのよう

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

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

enter image description here

そして、我々

colorbar 

enter image description here

Iドン:カラーバーを入れたいです結果のように右の数字が鳴り止まらないようにしてください。どのようにして、カラーバーを一番下の図から1行分のサブプロットに入れて、それらのサイズを変更しないでおくことができますか?

注:実際には、カラーバーが共通している画像をプロットするのに必要です。右に置いてみたいと思います。私は簡単にするためにこのおもちゃの例を使用しました。

答えて

13

最初のプロットの位置を抽出し、2番目のプロットの位置を使用できます。再スケーリングすると、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

+0

グレート!自動解法は優れていますが、ブルートフォースはプロット間の間隔を右のプロットとカラーバーの間の間隔に等しくすることができます。 2つの良い方法を提供してくれてありがとう。 – petrichor

1

これは私が探していただけのものです。 Vidar's automatic solutionを実装した後、私は単純化を思いついた。カラーバーを追加する前に、右端の軸の位置を取得して、元の位置に戻します。

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

私は試しましたが、カラーバーのラベルはプロットの外側にあるようです。 – petrichor