SAS

GTLで凡例を極める(2)legenditemステートメント

グラフの凡例は基本的にプロットオブジェクトに関する説明を載せるものなので、それ以外のものを載せることはできません。
しかし作図の都合上、凡例にプロットされているデータについて補足の説明を載せたいときがあります。ダミーデータを使うのも手ですが
GTLではプロットデータに依存せずに任意の凡例を作成する方法があります。今回はその方法の1つであるlegenditemステートメントを紹介します。

任意の凡例を作成する

前回の記事で紹介した作図例では、凡例にプロットデータとは異なる項目が記載されています。

GTLでスイマープロットを作図する(1)highlowplotステートメント抗がん剤研究でたまに見かけるスイマープロット。聞いたことがない方が多いですが、治療履歴を個々の患者ごとに表示するときは便利なグラフです。...
スイマープロット

「response start」と「response end」はプロット上では赤と青のマーカーで表示されていますが、凡例のマーカーは灰色のマーカーになっています。灰色のマーカーはどこにもありません。
普通の凡例の場合は赤と青のマーカーが表示されるため、項目はresponseの項目だけで4つになります。しかし色の指定はラインの設定と同じで図形の説明だけを記載すれば凡例のスペースが少なく済みます。
そこで灰色のマーカーの凡例を新規に作成し図形の説明のみを載せる形にしているわけです。(灰色は「任意の色」であることを示しています。)

legenditemステートメント

legenditem type=凡例の種類 name="識別名" /;

legenditemステートメントは凡例の項目を作成するステートメントです。begingraphブロック内で定義した後、discretelegendステートメントで識別名を指定すると任意の凡例項目を表示できます。

typeはfill, marker, markerline, line, textのいずれかを指定します。それぞれの属性の定義はfillattrs, outlineattrs, markerattrs, lineattrs, textattrsオプションで指定します。textのみtextオプションで凡例に表示する文字列を指定します。

各項目の説明はlabelオプションで指定します。

作図例

proc template;
define statgraph legenditem;
begingraph;
legenditem name="a" type=marker / markerattrs=GraphData5(symbol=squarefilled size=12) label="マーカー";
legenditem name="b" type=fill / fillattrs=GraphData6 label="塗り";
legenditem name="c" type=markerline / markerattrs=GraphData7(symbol=trianglefilled size=12) lineattrs=GraphData7 label="マーカーとライン";
legenditem name="d" type=line / lineattrs=GraphData8(thickness=4) label="ライン";
legenditem name="e" type=text / text="TEXT" textattrs=(color=cx0a4bce) label="テキスト";

layout overlay;
   barchartparm category=x response=res;
   discretelegend "a" "b" "c" "d" "e";
endlayout;
endgraph;
end;
run;

data test;
x="cat1";
res=10;
run;

proc sgrender data=test template=legenditem;
run;

5種類の凡例項目を作成しグラフに表示してみます。

実行結果

棒グラフのデータには依存せずに任意の凡例を設置できました。これを使うと凡例の作成がより柔軟に実施することができます。