% SUBPLOT_SPACED  マージン(余白)とギャップ(隙間，間隔)指定付きのsubplotsを作成
%
% ax = subplot_spaced(n,m,margins,gap)は，subplotを使って，n x m個のサブプロット群を
% 作成し，作成した軸ハンドルをaxに返します．
% margins = [topmargin bottommargin leftmargin rightmargin];
% gap = [longitudinalgap horizontalgap];

function ax = subplot_spaced(n,m,margins,gap)
argcheck('n',1);    argcheck('m',1);    argcheck('margins',[0 0 0 0]);  argcheck('gap',[0 0]);

for i=1:n
    for j=1:m
        ax(i,j)=subplot(n,m,j+m*(i-1));
    end
end
t = margins(1);b = margins(2);l = margins(3);r=margins(4);
vgap = gap(1); hgap=gap(2);
%縦方向
o_height = 1 - t - b;           %外枠の大きさを計算
v_step = (o_height - (n-1)*vgap)/n;  %ギャップ量を引いた分の，ひとつあたりの高さを計算
%横方向
o_width = 1 - l - r;           %外枠の大きさを計算
h_step = (o_width - (n-1)*hgap)/m;  %ギャップ量を引いた分の，ひとつあたりの高さを計算

for j=1:m
    for i=1:n
        op2 = [(j-1)*(h_step+hgap)+l (i-1)*(v_step+vgap)+b h_step v_step];
        set(ax(i,j),'outerposition',op2);
    end
end

end

function argcheck(name,value)
if evalin('caller',['~exist(''' name ''',''var'')' ])
    assignin('caller',name,value);
end
end
