11

1 行 2 列のサブプロットがあり、次のように内部にいくつかのグラフィックスをプロットするとします。

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

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

ここに画像の説明を入力

次に、カラーバーを配置します。

colorbar

ここに画像の説明を入力

結果のように右の図を絞りたくありません。サブプロットの行の右端の図からカラーバーを外し、それらのサイズを変更しないようにするにはどうすればよいでしょうか?

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

4

2 に答える 2

14

最初のプロットの位置を抽出して、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]);

ここに画像の説明を入力してください

于 2012-05-18T10:40:02.787 に答える
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);
于 2013-05-16T14:26:42.910 に答える