2016年12月15日木曜日

GTLで線形軸(LINEAROPTS=オプション)の最小・最大値を設定する際の注意点




よく勘違いする部分なので、まとめておきます。
ここでは「LAYOUT OVERLAY」内で線形軸を設定する場合の説明になります。



まずは軸設定の失敗例を2つ。

失敗例1
「TICKVALUESEQUENCE」や「TICKVALUELIST」で目盛を設定できますが、
たとえば以下の通り目盛「0~30」、目盛間隔「1」 と設定すると、、

proc template ;
   define statgraph MYGRAPH;
      begingraph;
      layout overlay / xaxisopts=(linearopts=(tickvaluesequence=(start=0 end=30 increment=1)));
           scatterplot x=AGE y=WEIGHT;
      endlayout;
      endgraph;
   end;
run;

proc sgrender data=SASHELP.CLASS template=MYGRAPH;
run;



実際のデータ(Age)が「11~16」の範囲にあるため、目盛は0~30ではなく、11~16になっています。


失敗例2
では今度は、目盛 「12~14」、目盛間隔「1」 と設定した場合、

proc template ;
   define statgraph MYGRAPH;
      begingraph;
      layout overlay / xaxisopts=(linearopts=(tickvaluesequence=(start=12 end=14 increment=1)));
           scatterplot x=AGE y=WEIGHT;
      endlayout;
      endgraph;
   end;
run;

proc sgrender data=SASHELP.CLASS template=MYGRAPH;
run;



実際のデータ(Age)は「11~16」なので、軸は11~16の範囲まで設けられますが、目盛としては12~14が表示されます。



よく頂く質問が、『軸の最小・最大値を 「TICKVALUESEQUENCE」や「TICKVALUELIST」で設定したのに、うまく設定できない!』というものです。
上記で説明した通り、 「TICKVALUESEQUENCE」や「TICKVALUELIST」は目盛を設定するだけなので、軸の範囲(最小・最大)も別途設定する必要があります。



以下に軸の設定例を2つ紹介します。
【シチュエーション】軸の最小・最大を0~30、目盛間隔を2に設定したい


軸の設定例1
「TICKVALUEPRIORITY=TRUE」を指定することで、「TICKVALUESEQUENCE」や「TICKVALUELIST」による目盛の最小・最大値を軸に含めることが出来ます。

proc template ;
   define statgraph MYGRAPH;
      begingraph;
      layout overlay / xaxisopts=(linearopts=(tickvaluepriority=true
                                                               tickvaluesequence=(start=0 end=30 increment=2)));
           scatterplot x=AGE y=WEIGHT;
      endlayout;
      endgraph;
   end;
run;

proc sgrender data=SASHELP.CLASS template=MYGRAPH;
run;

ただし「失敗例2」のように、
「TICKVALUESEQUENCE」や「TICKVALUELIST」で設定した目盛の範囲外に、実際のPLOTするデータがある場合、「TICKVALUEPRIORITY=TRUE」は効果なしです(結果は「失敗例2」の出力結果と同様、実際のPLOTするデータの範囲まで軸が拡張される)



軸の設定例2
「VIEWMIN」,「VIEWMAX」で軸の範囲(最小・最大)を設定し、「TICKVALUESEQUENCE」や「TICKVALUELIST」で目盛を設定する。

proc template ;
   define statgraph MYGRAPH;
      begingraph;
      layout overlay / xaxisopts=(linearopts=(viewmin=0 viewmax=30
                                                               tickvaluesequence=(start=0 end=30 increment=2)));
           scatterplot x=AGE y=WEIGHT;
      endlayout;
      endgraph;
   end;
run;

proc sgrender data=SASHELP.CLASS template=MYGRAPH;
run;

注意点として、
「VIEWMIN」「VIEWMAX」で軸の範囲(最小・最大)が固定されるので、実際のPLOTするデータが軸の範囲外にあっても、その範囲外のPLOT部分はグラフに表示されません。


最後に、
他のオプションとの組み合わせによって、今回紹介したオプションの機能が無効または挙動が変わるので、その辺りの細かい部分についてはリファレンスも確認してみて下さい。



0 件のコメント:

コメントを投稿