SAS

GTLの軸設定を極める(2) 目盛りの指定方法

軸設定の解説の2回目は目盛りの制御です。

目盛りそのものは特に設定しなくてもSASが自動設定してくれますが、同じ体裁のグラフを異なるデータセットを使って作成する場合は目盛りの設定も明確に定義したほうが便利です。

リスト形式で指定する

表示したい目盛りが事前に決まっており、かつ等間隔ではない場合はtickvaluelistオプションを利用します。
これはすべての軸タイプで使用可能です。


/*tickvaluelist*/ /*目盛りが複数ある場合は半角スペースで区切る*/ 
layout overlay / xaxisopts=(type=linear linearopts=(tickvaluelist=(0 25 50 100))); ・・・・ 
endlayout;

上記の軸設定は軸目盛を0, 25, 50,100となるように設定しています。目盛間隔が等間隔である必要はありません。

等間隔の目盛りを作成する

線形軸

線形軸(type=linear)の目盛りを等間隔に作成する場合はtickvaluesequenceオプションを利用したほうが簡単です。

これは目盛の最小値、最大値、目盛間隔を指定することで、指定した範囲で等間隔の目盛りを作成できます。

/*tickvaluesequence*/ 
/*start=目盛りの最小値 end=目盛りの最大値 increment=目盛間隔*/ 
layout overlay / xaxisopts=(type=linear 
                 linearopts=(tickvaluesequence=(start=0 end=100 increment=25)))
; ・・・・ 

endlayout;

上記の軸設定は軸目盛を0, 25, 50,75,100となるように設定しています。

時間軸

時間軸(type=time)の場合はintervalオプションを使用します。ただし目盛り間隔は下表に記載されたキーワードのみ指定できます。
時間軸の代わりに線形軸を指定し、軸フォーマットを時間フォーマットを指定しても同様のことができますが、素直に時間軸を使ったほうが目盛間隔設定が簡単です。
特に4半期ごとの目盛りは時間軸を使ったほうがずっと簡単でしょう。

時間間隔キーワード対応するSAS日時値、
SAS日付値またはSAS時間値
間隔目盛ラベルフォーマット
AUTODATE, TIME, or DATETIME自動自動
SECONDTIME or DATETIMETIME8.
MINUTETIME or DATETIMETIME8.
HOURTIME or DATETIMETIME8.
DAYDATE or DATETIMEDATE9.
TENDAYDATE or DATETIME10日DATE9.
WEEKDATE or DATETIME7日DATE9.
SEMIMONTHDATE or DATETIME半月(第1日~第16日毎)DATE9.
MONTHDATE or DATETIMEMONYY7.
QUARTERDATE or DATETIME3か月YYQC6.
SEMIYEARDATE or DATETIME半年MONYY7.
YEARDATE or DATETIMEYEAR4.

この時軸フォーマットを指定しないと上記の表に記載したフォーマットが強制的に適用されます。
任意のフォーマットを指定したい場合はtickvalueformatオプションを利用する必要があります。

data test; 
call streaminit(123); 
format date yymmdd10.; 
do date=mdy(1,1,2021) to mdy(12,31,2021); 
result=abs(int(rand("normal")*1000))*0.1*date/100; 
output; 
end; 
run; 
proc template ; 
define statgraph axis; 
begingraph; 
layout overlay / 
   xaxisopts=(type=time timeopts=(interval=month)); 

   seriesplot x=date y=result; 
endlayout; 
endgraph; 
end; 
run; 

ods graphics / height=16cm width=25cm; 
proc sgrender data=test template=axis; 
run;
月毎に目盛りを作成する

上記のコードを実行するとX軸目盛は月ごとに作成されます。これをinterval=quarterに修正すると4半期ごとに目盛りを作成できます。

4半期毎に目盛りを作成する

目盛りの表示範囲を指定する

目盛りの表示範囲はviewminオプションとviewmaxオプションで範囲の下限および上限を指定することで定義することができます。

tickvaluelistなどで表示する目盛りを指定したとしても、データの範囲応じて表示範囲が自動調整されてしまうので、データに依らずに軸範囲を
一定にしたいのであればviewminとviewmaxを指定する必要があります。

layout overlay / xaxisopts=(type=linear viewmin=最小値 viewmax=最大値);
 ・・・・ 
endlayout;

目盛りの順序を反転させる

通常軸目盛はX軸は左から右へ、Y軸は下から上へ値が大きくなるように設定されます。離散軸の場合は特に指定しない限りレコードの順番に従います。
reverseオプションはこの順序を反転させることができます。

このオプションは離散軸の場合によく使います。たとえばフォレストプロットの縦軸は集計項目となりますが、reverseオプションを使わない場合はレコードに順番に従って
下から上へ項目が配置されます。したがってデータセットのレコード順とは逆の順序で配置されてしまうのです。y軸にreverseオプションを指定するとデータセットのレコード順と同じ配置にできます。

layout overlay / yaxisopts=(type=discrete reverse=true); 
・・・・ 
endlayout;

軸末端に余白を設定する

軸の末端に余白を設定するにはoffsetminおよびoffsetmaxオプションを使用します。offsetminは軸の最小値側の末端を、offsetmaxは最大値側の末端の余白を指定します。auto またはautocompressを指定すると余白を自動設定してくれますが、数値指定するとデータに依らずに一定の余白を指定することができます。
数値を指定数場合は0~1の範囲で指定します。これは軸の全体長に対する割合です。したがってoffsetminとoffsetmaxの合計は1以下でなければなりません。また余白には目盛りは表示されません。

layout overlay / 
   yaxisopts=(offsetmin=最小値側の余白設定 offsetmax=最大値側の余白設定); 
・・・・ 
endlayout;
offsetなし
offsetmin=0.1 offsetmax=0.1

軸の原点を指定する

通常軸の原点はデータの最小値に応じて自動で設定されますが、originオプションを使用すれば原点の位置を指定することができます。
このオプションは直交座標(デカルト座標)を作図したいときに利用します。

例えば以下のコードを実行すると軸の原点はデータの最小値に従って設定されます。

data test;
do x=-3 to 3 by 0.1;
y=sin(x);
output;
end;
run;
proc template;
define statgraph sin;
begingraph;
layout overlay;
scatterplot x=x y=y;
endlayout;
endgraph;
end;
run;
proc sgrender data=test template=sin;
run;
実行結果

このコードを以下のように書き換えると。データに依らずに軸の原点が(0,0)に設定されます。

layout overlay / xaxisopts=(linearopts=(origin=0)) 
                 yaxisopts=(linearopts=(origin=0)); 

   scatterplot x=x y=y; 

endlayout;
実行結果(origin=0)

補助目盛りを設定する

離散軸以外の軸タイプは補助目盛を表示できます。
線形軸および対数軸はminortickcountオプションで主目盛り当たりの補助目盛の個数を指定できます。
時間軸はminortickintervalオプションで補助目盛間隔を指定できます。

layout overlay / xaxisopts=(type=linear linearopts=(minorticks=true minortickcount=2); 
・・・・ 
endlayout; 

layout overlay / xaxisopts=(type=log logopts=(minorticks=true minortickcount=2); 
・・・・ 
endlayout; 

layout overlay / xaxisopts=(type=time timeopts=(minorticks=true minortickinterval=時間キーワード); 
・・・・ 
endlayout;

例えば前項のグラフの主目盛りを4半期、補助目盛りを月に設定するには、軸設定を以下のように書き換えます。

layout overlay / xaxisopts=(type=time 
         timeopts=(minorticks=true interval=quarter minortickinterval=month); 

・・・・ 
endlayout;