グラフを希望通りに作成するためには軸の設定方法を理解することはとても大事です。設定項目は多いので実務でとくにおぼえておいたほうがいい部分だけを複数回紹介します。
GTLでは4つの軸タイプがあり、作図によって使い分ける必要があります。
軸タイプの種類と設定方法
GTLで用意されている軸は以下の通りです
タイプ名 | 説明 |
---|---|
linear | 連続変数を指定した時に設定される。目盛りの値は大小関係があり、目盛の間にも数値が存在している。 |
discrete | 離散変数(文字列変数)を指定した時に設定される。目盛の間には値は存在しない。 |
log | 対数軸。値が大きくばらついているときに使用すると見やすくなる。0以下は定義されない。 |
time | 時間軸。時系列データを作図するときに用いる。 |
linearのほうが使い勝手が良い
discreteを使用する場合は注意点があります。それはdiscreteをサポートしていないplotステートメントがいくつか存在することです。
例えばvectorplotステートメントはdiscreteでは作図できずエラーとなります。またbarchartやboxplotなどは特に指定しない場合は自動的に軸がdiscreteに設定されるため、もし別のグラフを重ね合わせる場合は
軸設定を明示的に指定する必要があります。
そのためdiscreteよりもlinearを利用したほうが利便性が高いです。例えばA群、B群・・・といったカテゴリ変数を軸変数と指定する場合、文字列ではなくフォーマットを当てたコード値(連番)を指定したほうが重ね合わせられるグラフがずっと増えます。軸目盛はフォーマットが反映されますので、見た目はdiscreteを使用した場合と全く同じです。
例えばバイオリンプロットの作図例では、カテゴリ変数をコード値変数として置き換えて作図しています。文字列変数を軸として指定すると作図不可となります。
ウォーターフォールプロットと矢印を重ね合わせる場合は、軸タイプを明示的にlinearに指定しないとエラーになります。これは棒グラフを指定すると自動的に軸タイプがdiscreteに設定されるためです。
https://picolabs.jp/SAS-GTL-waterfallplot
軸タイプを気を付けないとデータが表示されないといった問題も発生します。過去記事でも紹介しています。
指定方法
軸を明示的に指定する場合はxaxisoptsまたはyaxisoptsオプションでtypeを指定するだけです。軸の詳細設定を軸タイプごとにオプションが用意されているので、指定した軸のオプションを使用しましょう。
/*線形軸*/
layout overlay / xaxisopts=(type=linear linearopts=(設定)); ・・・
endlayout;
/*離散軸*/
layout overlay / xaxisopts=(type=discrete discreteopts=(設定)); ・・・
endlayout;
/*対数軸*/
layout overlay / xaxisopts=(type=log logopts=(設定)); ・・・
endlayout;
/*時間軸*/ layout overlay / xaxisopts=(type=time timeopts=(設定)); ・・・
endlayout;
おそらく一番使用するにはdiscreteとlinearでしょう。以下の例ではこの二つの軸の違いを示したものです。
discreteは目盛の大小関係はないため棒グラフは等間隔に並びますが、linearは各目盛りの大小が反映されています。
proc template;
define statgraph axis;
begingraph;
entrytitle "type=linear";
/*離散軸 discreteの設定*/
/* layout overlay / xaxisopts=(type=discrete); */
/*線形軸 linearの設定*/
layout overlay /
xaxisopts=(type=linear offsetmin=0 offsetmax=0
linearopts=(tickvaluelist=(1 2 4 8 24 ) viewmin=0 viewmax=30)
);
barchartparm category=time response=response /
errorupper=upper
errorlower=lower
display=(outline)
errorbarattrs=(color=black);
endlayout;
endgraph;
end;
run;
proc sgrender data=test template=axis;
run;