2019年2月22日金曜日

グラフのマーカーや線などの属性をGROUP毎に設定する【Attribute Map Dataset 編】



「Attribute Map Dataset」を利用して、「SGPLOT」や「GTL」でマーカーや線などの属性を定義する方法を紹介します。




まず、以下の可愛らしいグラフをご覧ください。




年齢ごとに、マーカーの種類や色を変えて散布図を描いてます。
どうやってるか解説していきたいと思います。





Step1. 「Attribute Map Dataset」を作成する


まずグループ(年齢)毎にマーカーの種類や色を定義したデータセットを作ります。
(このデータセットを「Attribute Map Dataset」と呼びます)

data MYMAP;
input ID:$10. VALUE:$10. MARKERCOLOR:$10. MARKERSYMBOL:$30. MARKERSIZE:8.;
cards;
myid 11 blue CircleFilled 11
myid 12 red  StarFilled 11
myid 13 yellow TriangleFilled 11
myid 14 lightgreen DiamondFilled 11
myid 15 black SquareFilled 11
myid 16 skyblue TriangleDownFilled 11
;



たとえば1OBS目では以下を設定しています。
  • グループの値(今回は年齢)が「11」の時に、
  • マーカー色「blue」
  • マーカーの種類「CircleFilled」
  • マーカーサイズ「11」



データセットには以下のような変数を含めることが出来ます(一部抜粋)

変数設定内容備考
ID文字ID値
VALUE文字グループの値・例えば年齢をグループにするのであれば年齢の値
グループにする変数にFORMATが割り当てられている場合、FORMATを当てた後の値を指定する事。

例えば 11 = "11歳" のようにFORMATが当てられている場合、"11歳" の方を指定する。
FillColor文字グラフの中の色・棒グラフの中の色など
MarkerColor 文字マーカーの色・散布図のマーカーの色など
MarkerSize数値マーカーのサイズ・散布図のマーカーのサイズなど
MarkerSymbol文字マーカーの種類・散布図のマーカーの種類など
LineColor文字線の色・折れ線グラフの線の色など
LinePattern数値/
文字
線の種類・折れ線グラフの線の種類など
LineThickness数値線の太さ・折れ線グラフの線の太さなど
…等々

(「ID」と「VALUE」は必ずデータセットに含める必要があり、それ以外は任意)





Step2. グラフを描画


Step1で作った「Attribute Map Dataset」をSGPLOTまたはGTLで参照してグラフを描くことが出来ます。

注意:
SAS9.4M3より前のバージョンでは、この機能 (Attribute Map Dataset) と一緒に、PLOTステートメント (SCATTERやSERIESなど) でも属性を定義している場合、結果のプロット部分と凡例部分の属性が一致していないおかしな状態になってしまうことがある?らしいので注意。

  • SGPLOTで描画
proc sgplot data=SASHELP.CLASS dattrmap=MYMAP;
   scatter x=HEIGHT y=WEIGHT / group=AGE grouporder=ascending attrid=myid;
run;

  • group=」でAGE毎に散布図を描いています。
  • dattrmap=」で参照する Attribute Map Dataset を指定。
  • attrid=」で参照する Attribute Map Dataset のID値を指定。



  • GTLで描画
proc template ;
     define statgraph MYTEMP ;
     begingraph;

     layout overlay;
          scatterplot x=HEIGHT y=WEIGHT / group=AGE grouporder=ascending name="leg1";
          discretelegend "leg1" / title="Age";
     endlayout;

     endgraph;
     end;
run;

proc sgrender data=SASHELP.CLASS template=MYTEMP dattrmap=MYMAP;
     dattrvar AGE="myid";
run;


  • group=」でAGE毎に散布図を描いています。
  • dattrmap=」で参照する Attribute Map Dataset を指定。
  • dattrvar」でグループ変数AGEに対応づけるAttribute Map DatasetのID値を指定。



0 件のコメント:

コメントを投稿