GTLにはlayoutブロックというグラフオブジェクトの配置を定義する仕組みがあります。
layoutブロックにはいくつか種類がありますが、どのように使い分けたらよいか知らない方も多いはず
今回はlayoutブロックの使い分けを考えていきます。
Single-cell レイアウト
OVERLAYレイアウト
一番使うレイアウトで、汎用的な2Dグラフレイアウトです。
proc template;
define statgraph mygraph;
dynamic _X _Y _GROUP _TITLE;
begingraph;
entrytitle _TITLE;
layout overlay;
scatterplot x=_X y=_Y /
name="scatter"
group=_GROUP;
discretelegend "scatter";
endlayout;
endgraph;
end;
run;
proc sgrender data=sashelp.iris template=mygraph;
dynamic _TITLE="Iris data"
_X="SepalLength"
_Y="PetalLength"
_GROUP="Species";
run;

実行結果(layout overlayステートメント)
PROTOTYPEレイアウト
複数のグラフを格子状に配置するDATALATTICEレイアウトまたはDATAPANELレイアウトと共に使用します。
群変数ごとに複数のグラフを配置するときに使います。
なおPROTOTYPEレイアウトの内部に以下のオブジェクトを設置することはできません。
- 軸のないグラフ(円グラフ、モザイクプロット)
- 3Dグラフ
- 凡例
- eval関数を用いて新規作成した変数
- テキスト (entryステートメント)
SAS9.4 M1以降であればINNERMARGINブロックを設置することはできるそうです。
REGIONレイアウト
軸のないグラフを配置するときに使います。円グラフとモザイクプロットの専用レイアウトです。
OVERLAY3Dレイアウト
3Dグラフを配置します。SASユーザーでこれを使っている人は少ないはず・・・
OVERLAYEQUATEDレイアウト
OVERLAYEQUATEDはOVERLAYとほほ同じ仕様ですが、以下のような違いがあります。
- 軸は必ずLINEAR(線形)なります。そのため軸が線形ではない以下のグラフは表示できません。
- 箱ひげ図
- 棒グラフ
- ヒストグラム
-ヒートマップ(両軸ともにビンを指定した場合)
- 両軸のデータ間隔は必ず等しくなります。
OVERLAYレイアウトと同じグラフをOVERLAYEQUATEDレイアウトで作成してみましょう。
equatetypeオプションでプロットエリアの大きさと目盛間隔を制御できます。デフォルトはFITです。
proc template;
define statgraph mygraph;
dynamic _X _Y _GROUP _TITLE;
begingraph;
entrytitle _TITLE;
layout overlayequated /
equatetype=FIT;
scatterplot x=_X y=_Y /
name="scatter"
group=_GROUP;
discretelegend "scatter";
endlayout;
endgraph;
end;
run;
proc sgrender data=sashelp.iris template=mygraph;
dynamic _TITLE="Iris data"
_X="SepalLength"
_Y="PetalLength"
_GROUP="Species";
run;
equatetype=FITにした場合、軸の範囲はデータに依存するので必ずしもプロットエリアは正方形にはなりません。

layout overlayequated ステートメント, デフォルト
equatetype=squareにすると軸の範囲はデータの最大値と最小値に応じて決定され、両軸共に範囲が同じになります。プロットエリアは正方形になります。

layout overlayequated ステートメント, square
equatetype=squareにすると軸の範囲はデータの最大値と最小値に応じて決定されますが、両軸の範囲は同じになりません。データがプロットエリアの中央に来るように調整されるようです。プロットエリアは正方形になります。

layout overlayequated ステートメント, squaredata
equatetype=equateはFITと同じですが、FITのように軸は拡張されません。その分プロットエリアの余白が少なくなります。

layout overlayequated ステートメント, equate
2変数の相関を見るために散布図を作成するときはOVERLAYEQUATEDを使ったほうがよさそうです。equatetypeはsquareかsquaredataがいい感じです。
同じことをOVERLAYレイアウトでもできますが、軸設定を細かく指定しないといけないので手間を考えるとOVERLAYEQUATEDを使ったほうがいいです
まとめ
よく使うのはおそらくOVERLAY, PROTOTYPE, REGIONだと思うので、この3つをおさえておけばOKです。
OVERLAYEQUATEDは散布図を作成するときに利用するとよいと思います。