---
title: グラフの出力制御について
tags:  #[第4回大阪sas勉強会]  
author: [森岡裕[SASユーザー総会世話人]](https://www.docswell.com/user/6484025)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/PJRW5XXK79.jpg?width=480
description: [第4回大阪sas勉強会] 遠山 拓
published: April 02, 24
canonical: https://www.docswell.com/s/6484025/K4QXYY-2024-04-02-112441
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/PJRW5XXK79.jpg)

グラフの出力制御について
2018年12月21日
EPS株式会社 統計解析部
遠山 拓
1


# Page. 2

![Page Image](https://bcdn.docswell.com/page/PEXPK6657X.jpg)

経緯と目的
社内の勉強会でSGPLOTプロシジャについて発表。
↓
以来、SGPLOTプロシジャについて、いくつか相談を受けるようになる。
↓
実際に受けた相談や課題の内容を本発表で紹介する。
2


# Page. 3

![Page Image](https://bcdn.docswell.com/page/3EKD511RJD.jpg)

目次
１．軸にラベルと単位を同時表記する
２．Waterfall Plotで被験者IDを表記する
３．Forest Plotで項目ごとに背景を色付けする
3


# Page. 4

![Page Image](https://bcdn.docswell.com/page/L73RKQQGJ5.jpg)

１．軸にラベルと単位を同時表記する
単位を真上・真横に出したい
同時にラベルも出したい
4


# Page. 5

![Page Image](https://bcdn.docswell.com/page/87DY399N7G.jpg)

１．軸にラベルと単位を同時表記する
単位を真上・真横に出したい
オプションで制御可能
同時にラベルも出したい
単位と同時出力をオプ
ションで制御することは
不可能
⇒XAXISTABLEと
SGANNOを駆使して
無理やり出力する。
5


# Page. 6

![Page Image](https://bcdn.docswell.com/page/VJP64ZZNE8.jpg)

１．軸にラベルと単位を同時表記する
単位の表示（XAXIS/YAXIS）
proc sgplot data=KM sganno=anno;
…（中略）…
*軸設定(単位をラベルとして表示);
xaxis offsetmin=0.05 offsetmax=0.05
label=&quot;(Day)&quot; labelpos=right;
yaxis offsetmin=0.15 min=0 max=100
label=&quot;(%)&quot; labelpos=top;
…（中略）…
run;
単位を軸ラベルとして
出力（LABELオプショ
ンで単位を指定）
配置を指定（LABELPOSオプション）
X軸は”RIGHT”、Y軸は”TOP”
で指定する。
6


# Page. 7

![Page Image](https://bcdn.docswell.com/page/2EV3XWWY7Q.jpg)

１．軸にラベルと単位を同時表記する
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


# Page. 8

![Page Image](https://bcdn.docswell.com/page/57G3VDDWJL.jpg)

１．軸にラベルと単位を同時表記する
Y軸ラベルの表示（SGANNO）
SGANNOで出力する。
(SGANNO用Datasetの作成)
*Y軸ラベル;
%sganno;
data anno;
%sgtext(label=&quot;Survival rate&quot;, width=20,
discreteoffset=0.5, rotate=90,
drawspace=&quot;graphpercent&quot;, y1space=&quot;wallpercent&quot;,
anchor=&quot;bottom&quot;, x1=10, y1=50, textsize=10);
run;
proc sgplot data=KM sganno=anno;
…（中略）…
run;
SGANNOオプショ
ンでDatasetを指定
私の力ではSGANNOで出力するのが
精一杯でした…
8


# Page. 9

![Page Image](https://bcdn.docswell.com/page/4EQ5611QJP.jpg)

１．Waterfall Plotで被験者IDを表記する
グラフの上/下に被験者
IDを表示したい
9


# Page. 10

![Page Image](https://bcdn.docswell.com/page/KJ494RRY71.jpg)

２．Waterfall Plotで被験者IDを表記する
グラフの上/下に被験者
IDを表示したい
オプションで制御可能
※ただし、表示する位置
の制御は自由度が低い。
10


# Page. 11

![Page Image](https://bcdn.docswell.com/page/LE1K4QQNJG.jpg)

２．Waterfall Plotで被験者IDを表記する
被験者IDの表示（DATALABELオプション）
VBARステートメントの
DATALABELオプションで制御
proc sgplot data=&amp;ds.;
…（中略）…
/*Waterfall Plotグラフ制御*/
vbar x / response=aval group=&amp;group.
barwidth=0.8 grouporder=descending
clusterwidth=1 transparency=0
name=&quot;Vbar&quot; baseline=0
datalabel=subjid datalabelpos=data
datalabelfitpolicy=rotate
datalabelattrs=(size=8)
groupdisplay=cluster ;
…（中略）…
run;
datalablepos=dataでグラフの直上・直下に配置
datalabelfitpolicy=rotateで90°回転
(datalabelpos=dataでないと回転しません。)
※groupdisplay=clusterを忘れずに！
11


# Page. 12

![Page Image](https://bcdn.docswell.com/page/GEWDXMLMJ2.jpg)

３．Forest Plotで項目ごとに背景を色付けする
こんな感じで、項目ごとで背景
に色を付けられないですかね…
12


# Page. 13

![Page Image](https://bcdn.docswell.com/page/47ZG6QMME3.jpg)

３．Forest Plotで項目ごとに背景を色付けする
こんな感じで、項目ごとで背景
に色を付けられないですかね…
SGANNOを使うしかなさそう
ですね…
⇒REFLINEステートメント
使ったらいけるんじゃね？
（by 森岡さん）
13


# Page. 14

![Page Image](https://bcdn.docswell.com/page/YJ6Y26N57V.jpg)

３．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を突き
抜けずに出力される。
（原因不明）
今回は私の勝ちですかね (ｂｙ 森岡さん)
14


# Page. 15

![Page Image](https://bcdn.docswell.com/page/GJ5G265GJ4.jpg)

最後に
※紹介したグラフはフィクションです。出力したデータや被験者ID等は
架空のもので、実在する臨床試験とは全く関係ありません。
ご清聴ありがとうございました。
15


