web-dev-qa-db-ja.com

MATLAB Figureでサブプロットサイズを設定するにはどうすればよいですか?

私は頻繁に10個の画像を一緒にプロットする必要がありますが、このコードを使用すると小さな画像になります:

img = Rand(400,600); 
for i=1:10
 subplot(2,5,i); 
 imshow(img); 
 title(['Image ' int2str(i)]); 
end

ご覧のとおり、画像は画面内の使用可能なスペースをすべて使用しているわけではありません。サイズを増やす、またはそれらの間のパディング/マージンを減らすにはどうすればよいですか?

enter image description here

助けてくれてありがとう。

8
jeff

簡単な方法はないと思います。次の2つのオプションがあります。

最初に、サブプロットの位置部分を使用します。

>> subplot(2,5, i, [l, b, w, h])

そして、左、下、幅、高さを計算します。

または、返された軸のハンドルを取得します。

>> h(i) = subplot(2,5,i);

その後、軸を変更します。

>> set(h(1), 'position', [l, b, w, h] );

http://www.briandalessandro.com/blog/how-to-make-a-borderless-subplot-of-images-in-matlab/など、より詳細な情報を提供するページが多数あります。

[更新]

以下のコードは、あなたが探しているもののようなことができる人についてもう少し詳しく説明しています。ちょっと面倒です。 0.95と0.02は、ちょっとしたパディングを与えるためのものです。彼らは魔法ではありません。 :-)

「i」はsqrt(-1)として定義されているため、インデックス変数(または他の何か)として「ii」を使用することをお勧めします。インデックス変数として「i」と「j」を使用しないことは良い慣習です(特にMatlabでは)。

img = Rand(400,600); 

figure(1);
clf();
hold on;

% Get the width and height of the figure
lbwh = get(1, 'position');
figw = lbwh(3);
figh = lbwh(4);

% Number of rows and columns of axes
ncols = 5;
nrows = 2;

% w and h of each axis in normalized units
axisw = (1 / ncols) * 0.95
axish = (1 / nrows) * 0.95

for ii=1:10

    % calculate the row and column of the subplot
    row = floor( ii/(ncols+1) ) + 1
    col = mod( ii-1, ncols ) + 1

    % calculate the left, bottom coordinate of this subplot
    axisl = (axisw+0.02) * (col-1)
    axisb = (axish+0.02) * (row-1)

    %  plot the subplot
    h= subplot('position', [axisl, axisb, axisw, axish] ); 
    imshow(img); 
    title(['Image ' int2str(ii)]); 

    pause
end

あなたがそれがあなたが望むものを正確に行うためにそれで遊ぶ必要があります。そして、「ヘルプ」はあなたの友人です。

10
brechmos

私はしばしばこの要件を抱えており、それを達成するための最も効率的な方法は、サードパーティの subplot_tight 関数を使用することです。これは、subplotのスロットイン置換です。できる限り簡単に

figure(1); clf
subplot_tight(1,2,1, [0.05 0.05])
%normal plot stuff

ここで、4番目の引数の2つのパラメーターは、画像の周囲の可視空間の割合を制御します。

4
xenoclast

@brechmosの答えに基づいて、サブプロット番号が10サブプロットを超えると、彼のコードはエラーをトリガーします。

 % calculate the row and column of the subplot
 row = floor( ii/(ncols+1) ) + 1
 col = mod( ii-1, ncols ) + 1

例えば4X5セルの場合、サブプロット11は(2、1)として誤って解釈されますが、(3,1)ではありません。

以下のコードに置き換えて修正できます:

% calculate current row and column of the subplot
row = floor( (i-0.5)/ncols ) + 1;
col = mod(i-(row-1)*ncols, ncols+1); 
3
ouxiaogu

プロットを生成すると、Figureプロパティオプションを使用できます。サイズを変更するサブプロットをクリックします。プロパティエディターから[その他のプロパティ]オプションを選択します。スクロールすると、「位置」タブが表示されます。これらの値を変更してサブプロットの動きを確認し、好みに応じてサブプロットを調整できます。

0
Nahar