subplotで図の間隔を調整する(狭くする)方法 【MATLAB】

Nです.今回はMATLABのsubplot関数で図と図の間の距離を調整する方法とテンプレートを紹介します(自分用メモでもあります).

以下のコードがテンプレートになります.このコードはMATLABの質問ページのコードを少し書き換えたものになります.とりあえず行数と列数をrow, colで指定してplotしながらいい感じにver_rとcol_rを調整して使います.

figure;
figure_size = [ 0, 0, 960, 650];
set(gcf, 'Position', figure_size);
row = 5; % subplot行数
col = 4; % subplot列数
left_m = 0.1; % 左側余白の割合
bot_m = 0.1; % 下側余白の割合
ver_r = 1.3; % 縦方向余裕 (値が大きいほど各axes間の余白が大きくなる)
col_r = 1.15; % 横方向余裕 (値が大きいほど各axes間の余白が大きくなる)

for n =1:1:row*col
   % Position は、各Axes に対し、 [左下(x), 左下(y) 幅, 高さ] を指定
   ax(n) = axes('Position',...
      [(1-left_m)*(mod(n-1,col))/col + left_m ,...
      (1-bot_m)*(1-ceil(n/col)/(row)) + bot_m ,...
      (1-left_m)/(col*col_r ),...
      (1-bot_m)/(row*ver_r)]...
      );
   % plotしたいものを書いてください***********
   plot(ax(n),1:500,randn(1,500));
   % *****************************************
   legend(num2str(n))
   ylim([-4 4])
   if mod(n,col)==1
      ylabel('ylabel')
   else
      yticklabels([])
   end
   if n>(row-1)*col
      xlabel('xlabel')
   else
      xticklabels([])
   end
   % font size==================
   h=gca;
   fontsize=18;
   set(h,'fontsize',fontsize)
   % ===========================
end

そのまま実行すると以下のような図ができます.

例えばver_r, col_rを1.05にすると以下のように各図の間を狭くできます(1にすると図の間の間隔が0になります).

しかし図の間隔が狭いためx軸やy軸の値の表示がかぶってしまっています.軸の値を表示する位置はxticksやyticksを使って調整することができます.

例えば

xticks(0:100:400) %0から100間隔で400まで
yticks(-3:3:3)    %-3から3間隔で3まで

を上記のプログラムのforループ内に追加すると以下の図のように軸の値をかぶらないように調整できます.

subplotで各図の間隔を狭くすることでそれぞれの図を見やすくすることができるのでもしよかったら試してみてください.

コメント

タイトルとURLをコピーしました