MATLAB/subplotでx軸をくっつけたい

subplotで縦に図面を書いていたら,図面が縦に長くなりがちである.もしx軸が共通であればAslak Grinsted氏のsamexaxisを使ってよりスマートにプロットすることができる.

必要なfunction
使い方

samexaxisのhelpより

% Syntax
samexaxis([optionalarguments])

%   Optional arguments:
%    * YAxisLocation (default='left') : choose left,right, alternate or alternate2
%    * XAxisLocation (default='bottom') : choose bottom,top or both
%    * YLabelDistance (default=1.4)  
%    * Box (default='on')
%    * XTick
%    * XLim
%    * XTickLabel
%    * XMinorTick
%    * ABC : add a),b),c), ... to each sub plot
%    * Join: joins the subplots vertically
%    * YTickAntiClash: try to aviod yticklabel clashes (default=false)
  • YAxisLocation(‘left’か’right’,デフォルトは’left’): y軸の位置, ‘left’だと左に,’right’だと右にy軸のラベルと数値が描かれる
  • XAxisLocation(‘bottom’か’top’,デフォルトは’on’): x軸の位置,’bottom’だと一番下に,’top’だと一番上にx軸のラベルと数値が描かれる
  • YLabelDistance(デフォルトは1.4): y軸のラベルの位置, 作者のExampleでは’yld’, 1としている.
  • Box(‘on’か’off’,デフォルトは’on’): boxの有無
  • Xtick:プロットするx軸の目盛り値で増加するベクトル値で設定する必要がある.例えば0, 10, 50, 100のみ目盛り値に書きたいときは[0 10 50 100]
  • XLim: x軸の範囲でxlimと同様に増加するベクトル値で設定する.例えば0から50までの範囲でプロットしたいときは[0 50]
  • XTickLabel: x軸の目盛りラベルでベクトルで設定する.指定したラベルの個数が目盛りの個数よりも少ないと,ラベルが繰り返されるみたいだった.
  • XMinorTick(’on’または’off’): 小目盛りの有無, 作者のExampleでは’xmt’,’on’としている
  • ABC: 図にa), b), c),…のように番号を振るオプション
  • Join:subplotした図面を垂直につなげるかどうかのオプション
  • YTickAntiClash: y軸のラベルがぶつからないようにするオプション,これがないと上の図の原点と下の図の一番大きい値がぶつかって見えなくなってしまう(下の図を参照),作者のExampleでは’ytac’.

num = 100;
A = rand(num);
x = 1:1:num;

figure;clf
subplot(311)
plt1 = plot(x,A(1,:));
set(gca,'FontName','Helvetica','FontSize',12)
ylabel('y_1','FontName','Helvetica','FontSize',12)
subplot(312)
plt2 = plot(x,A(2,:));
set(gca,'FontName','Helvetica','FontSize',12)
ylabel('y_2','FontName','Helvetica','FontSize',12)
subplot(313)
plt3 = plot(x,A(3,:));
set(gca,'FontName','Helvetica','FontSize',12)
xlabel('x','FontName','Helvetica','FontSize',12)
ylabel('y_3','FontName','Helvetica','FontSize',12)

samexaxis('ABC','XMinorTick','on','Join','YTickAntiClash','YLabelDistance',1.0)

結果

参考サイト