1.2K Views
April 02, 24
スライド概要
[第4回大阪sas勉強会] 遠山 拓
SAS言語を中心として,解析業務担当者・プログラマなのコミュニティを活性化したいです
グラフの出力制御について 2018年12月21日 EPS株式会社 統計解析部 遠山 拓 1
経緯と目的 社内の勉強会でSGPLOTプロシジャについて発表。 ↓ 以来、SGPLOTプロシジャについて、いくつか相談を受けるようになる。 ↓ 実際に受けた相談や課題の内容を本発表で紹介する。 2
目次 1.軸にラベルと単位を同時表記する 2.Waterfall Plotで被験者IDを表記する 3.Forest Plotで項目ごとに背景を色付けする 3
1.軸にラベルと単位を同時表記する 単位を真上・真横に出したい 同時にラベルも出したい 4
1.軸にラベルと単位を同時表記する 単位を真上・真横に出したい オプションで制御可能 同時にラベルも出したい 単位と同時出力をオプ ションで制御することは 不可能 ⇒XAXISTABLEと SGANNOを駆使して 無理やり出力する。 5
1.軸にラベルと単位を同時表記する 単位の表示(XAXIS/YAXIS) proc sgplot data=KM sganno=anno; …(中略)… *軸設定(単位をラベルとして表示); xaxis offsetmin=0.05 offsetmax=0.05 label="(Day)" labelpos=right; yaxis offsetmin=0.15 min=0 max=100 label="(%)" labelpos=top; …(中略)… run; 単位を軸ラベルとして 出力(LABELオプショ ンで単位を指定) 配置を指定(LABELPOSオプション) X軸は”RIGHT”、Y軸は”TOP” で指定する。 6
1.軸にラベルと単位を同時表記する X軸ラベルの表示(XAXISTABLE) 別のデータとして proc sgplot data=KM sganno=anno; XAXISTABLEで縦積みする。 …(中略)… *X軸ラベル名出力; xaxistable xlabel / x=x1 nomissingchar nolabel pad=10px valueattrs=(size=10pt); *XAXISTABLEの表タイトル出力; xaxistable blank / class=title x=tAtRisk nomissingchar labelattrs=(size=12pt); *XAXISTABLEの表データ出力; xaxistable AtRisk / class=Group colorgroup=Group x=tAtRisk; …(中略)… NOLABELの run; 指定を忘れずに! X軸の中央にくるようにX座標を指定する。 (今回はx1=1250として出力した。) 7
1.軸にラベルと単位を同時表記する Y軸ラベルの表示(SGANNO) SGANNOで出力する。 (SGANNO用Datasetの作成) *Y軸ラベル; %sganno; data anno; %sgtext(label="Survival rate", width=20, discreteoffset=0.5, rotate=90, drawspace="graphpercent", y1space="wallpercent", anchor="bottom", x1=10, y1=50, textsize=10); run; proc sgplot data=KM sganno=anno; …(中略)… run; SGANNOオプショ ンでDatasetを指定 私の力ではSGANNOで出力するのが 精一杯でした… 8
1.Waterfall Plotで被験者IDを表記する グラフの上/下に被験者 IDを表示したい 9
2.Waterfall Plotで被験者IDを表記する グラフの上/下に被験者 IDを表示したい オプションで制御可能 ※ただし、表示する位置 の制御は自由度が低い。 10
2.Waterfall Plotで被験者IDを表記する 被験者IDの表示(DATALABELオプション) VBARステートメントの DATALABELオプションで制御 proc sgplot data=&ds.; …(中略)… /*Waterfall Plotグラフ制御*/ vbar x / response=aval group=&group. barwidth=0.8 grouporder=descending clusterwidth=1 transparency=0 name="Vbar" baseline=0 datalabel=subjid datalabelpos=data datalabelfitpolicy=rotate datalabelattrs=(size=8) groupdisplay=cluster ; …(中略)… run; datalablepos=dataでグラフの直上・直下に配置 datalabelfitpolicy=rotateで90°回転 (datalabelpos=dataでないと回転しません。) ※groupdisplay=clusterを忘れずに! 11
3.Forest Plotで項目ごとに背景を色付けする こんな感じで、項目ごとで背景 に色を付けられないですかね… 12
3.Forest Plotで項目ごとに背景を色付けする こんな感じで、項目ごとで背景 に色を付けられないですかね… SGANNOを使うしかなさそう ですね… ⇒REFLINEステートメント 使ったらいけるんじゃね? (by 森岡さん) 13
3.Forest Plotで項目ごとに背景を色付けする 背景の色付け(REFLINE) 半透明のREFLINEで背景を色付けする。 (thicknessで太さを付ける) proc sgplot data=forest_plot nowall noborder nocycleattrs noautolegend sganno = sganno; …(中略)… /*横の参照線(背景の色付け)*/ refline 5 11/ axis=y transparency=0.7 lineattrs=(thickness=85px); /*Y軸*/ yaxis reverse display=none colorbands=odd offsetmin=0.05 offsetmax=0.05; …(中略)… run; offsetmin、offsetmax を指定しないと REFLINEの太さに合わ せて自動調整される。 このコードを書かな いとREFLINEが YAXISTABLEを突き 抜けずに出力される。 (原因不明) 今回は私の勝ちですかね (by 森岡さん) 14
最後に ※紹介したグラフはフィクションです。出力したデータや被験者ID等は 架空のもので、実在する臨床試験とは全く関係ありません。 ご清聴ありがとうございました。 15