SAS

layoutステートメントを使いこなす(5) innermargin statement

エクセルは項目軸が2段になっているグラフを作成することができます。

エクセル作図例

こんな感じのグラフです。このグラフは薬物濃度の時間推移を示しており、時間範囲(phase1, phase2)を2段目の項目軸に表示させています。項目軸なので時間に関係なく目盛が等間隔なってしまうのはちょっと困りますが。

これをGTLで描いてみます。

innermarginステートメント

INNERMARGINステートメントはOVERLAYレイアウトの内側に余白を設定してその内部にグラフオブジェクトを設置できます。設置できるグラフステートメントはblockplotおよびaxistableステートメントのみです。

innermargin /<options>; 
   < plot stetements >; 
endinnermargin;

innermargin内にグラフオブジェクトを設置する場合はinnermargin~endinnermarginの間にグラフステートメントを挿入します。

先ほどのエクセルのグラフを作図してみます。体裁の都合上時間軸を対数軸にします。

data conc;
input phase $ time conc;
cards;
Phase1 0 0
Phase1 0.5 0.684
Phase1 1 3.63 
Phase1 2 2.61 
Phase1 3 2.15 
Phase1 4 1.94 
Phase1 6 1.17 
Phase2 8 0.861 
Phase2 12 0.628 
Phase2 24 0.579 
Phase2 48 0.477 
Phase2 96 0.289 
Phase2 144 0.188 
Phase2 216 0.0527 
; 
run;

proc template;
define statgraph innermargin;
begingraph;
   layout overlay /
      xaxisopts=(griddisplay=on type=log)
      yaxisopts=(griddisplay=on);
   innermargin /pad=0 separator=true separatorattrs=(color=black thickness=2px);
      blockplot x=time block=phase / 
         filltype=alternate 
         fillattrs=(color=yellow)
         altfillattrs=(color=skyblue)
         display=(fill values)
         valuehalign=center;
   endinnermargin;
   seriesplot x=time y=conc;
   endlayout;
endgraph;
end;
run;

proc sgrender data=conc(where=(time^=0)) template=innermargin;
run;

 

作図結果

時間範囲(phase1, phase2)をinnermarginに設置したboxplotで再現しています。エクセルとは若干異なりますが、横軸もしっかり線形軸になっておりいい感じです。

ただし時間範囲をプロットするのならboxplotを折れ線グラフの上に重ね書きしたほうがわかりやすいです。

blockplotステートメントで時系列データを時期別に色分けする以下のグラフは東京都の新型コロナウィルス陽性患者の人数の推移をプロットしたものです。 東京都の新型コロナウィルス陽性患者人数 ...

各項目の統計量をinnermarginに表示したい場合はaxistableステートメントを使いましょう。