2021年7月22日木曜日

Graph Template Language(GTL)入門:凡例の設定 (DISCRETELEGEND)


GTLで凡例を設定する「DISCRETELEGEND」と「MERGEDLEGEND」を紹介します。



凡例の表示

まずは例を示して、その後構文を紹介したいと思います。



proc template ;
  define statgraph MYTEMP ;
     begingraph;

          layout overlay;
               scatterplot x=HEIGHT y=WEIGHT / group=SEX name="sca" ;
               regressionplot x=HEIGHT y=WEIGHT / group=SEX name="regr" ;
               discretelegend "sca" "regr" / title="凡例";
          endlayout;

     endgraph;
  end;
run;

proc sort data=SASHELP.CLASS out=CLASS;
  by SEX;
run;
proc sgrender data=CLASS template=MYTEMP ;
run;




  • 「SCATTERPLOT」で凡例の参照名 "sca" を定義しておく
  • 「REGRESSIONPLOT」で凡例の参照名 "regr" を定義しておく
  • 「DISCRETELEGEND」で参照名 "sca" と "regr" を指定してこれらの凡例を表示しています
  • それぞれのPLOTステートメントで「GROUP=SEX」としているので、グループ変数をSEXとして凡例が表示されています。

構文

PROC TEMPLATE ;
   DEFINE STATGRAPH テンプレート名;
   BEGINGRAPH ;
         LAYOUTステートメント;

                PLOTステートメント  /  NAME = "参照名";
                DISCRETELEGEND  "参照名"  / オプション;

         ENDLAYOUT;
   ENDGRAPH;
   END;
RUN;

  • PLOTステートメントの「NAME=」で凡例の参照名を設定 (任意の名前でOK)
  • DISCRETELEGENDで参照名を指定して、凡例を表示します。



DISCRETELEGENDのオプション  (随時追加予定)

注意:
他のオプション・ステートメントとの組み合わせで、オプションが無効になることがあるため、トライ&エラーで正しく動くか確認が必要です。

設定内容設定
凡例タイトル
title = "タイトル"
凡例タイトルのボーダー
titleborder = true | false
凡例タイトルの書式
titleattrs = (
         family = 'フォント'
         size = サイズ
         color = 
         weight = bold  /* 太字 */
)
凡例の書式

valueattrs = (
         family = 'フォント'
         size = サイズ
         color = 
         weight = bold  /* 太字 */
)
凡例の書式で文字の大きさを変えたときに
凡例のマーカー等も大きくするか
autoitemsize = true | false
凡例のボーダーborder = true | false
凡例の表示順 (横順か縦順か)order = rowmajor | columnmajor
凡例の縦位置
valign = top | bottom | center
凡例の横位置halign = right | left | center
凡例の背景色backgroundcolor = 
「order = rowmajor」指定時に
水平方向に表示する凡例エントリの数
across = 数
「order = columnmajor」指定時に
垂直方向に表示する凡例エントリの数
down = 




凡例の結合


MERGEDLEGENDステートメントは使える条件が限定されますが、凡例を結合 (融合?) させることが出来ます。


proc template ;
  define statgraph MYTEMP ;
     begingraph;

          layout overlay;
               scatterplot x=HEIGHT y=WEIGHT / group=SEX name="sca" ;
               regressionplot x=HEIGHT y=WEIGHT / group=SEX name="regr" ;
               mergedlegend "sca" "regr" / title="凡例";
          endlayout;

     endgraph;
  end;
run;

proc sort data=SASHELP.CLASS out=CLASS;
  by SEX;
run;
proc sgrender data=CLASS template=MYTEMP ;
run;



「SCATTERPLOT」と「REGRESSIONPLOT」はそれぞれグループ変数をSEXにしてPLOTしていますが、凡例のマーカーと線をグループごとにくっつけてしまおう、ということでMERGEDLEGENDを使っています。


MERGEDLEGENDが使える条件
  • PLOTステートメントに「GROUP=」で、グループ化した値を凡例に表示している場合
  • マーカーと線を結合する場合のみ?に有効らしい
  • MERGEDLEGENDで指定可能なオプションはDISCRETELEGENDとほぼ同じ


凡例の設定