こんにちは。
前回はモノクロのKM曲線作成について投稿を行いました。
その際最後の方でも触れましたが、第2回は色、シンボル、線種を群ごとに指定する方法、
また好きな色を使用する簡単な方法を紹介したいと思います。
サンプルデータ作成と、At risk用のデータ加工については前回の投稿と全く同じになりますので、
そちらをご覧ください。
SGPLOTでグラフを作成する際、群やグループごとにATTRSの指定を行うステートメント
として、STYLEATTRSステートメントがあります。
このステートメントでは以下の指定ができます。
*DATACOLORS=(color-list)
*DATACONTRASTCOLORS=(color-list)
*DATALINEPATTERNS=(line-pattern-list)
*DATASYMBOLS=(marker-symbol-list)
プログラム例
proc sgplotdata=class;
styleattrs
datacontrastcolors=(red green)
datalinepatterns=(dot solid)
datasymbols=(circlefilled x);
series x=height y=weight / group=age;
run;
ということなので、前回のSGPLOTのプログラム部分に、
styleattrs datacontrastcolors=(red green) datalinepatterns=(dot solid) datasymbols=(circlefilled x);
を試しに入れてみましょう(ただし、ATTRSにおいてcolor=やsymbol=で指定している部分は削除すること)。
ods graphics / width=1100px height=700px border=off
reset=index imagename= "KMcurve" imagefmt=tiff ;
proc sgplot data = sgplot2 noautolegend;
styleattrs datacontrastcolors=(red green)
datalinepatterns=(dot solid)
datasymbols=(circlefilled x);
step x=Time y=Survival / group=StratumNum
lineattrs=(thickness=2) name="a" ;
scatter x=Time y=Censored / group=StratumNum
markerattrs=(size=15) ;
xaxistable AtRisk / x=tAtRisk class=StratumNum
valueattrs=(size=13) labelattrs=(size=13)
title="No. at Risk" titleattrs=(size=13);
yaxis values=(0 to 1 by 0.1)
label="Probability of Overall Survival"
valueattrs=(size=13) labelattrs=(size=13);
xaxis values=(0 to 24 by 3) offsetmin=0.03 offsetmax=0.02
label="Time(Months)" valueattrs=(size=13)
labelattrs=(size=13);
keylegend "a" / location = inside position = topright
titleattrs=(size=13)valueattrs=(size=13)
acros=1 noborder ;
format StratumNum treat. ;
run;
完成図は以下になります。
これでActiveとControlの体裁を分けることが出来ました。
さて、ここからは色をもっと自由に指定してみようという話になります。
SASでの色の指定は以下のようにいくつか方法があります。
・Color(Red,Green,Blue)
・RGB (CXFF0000,CX00FF00,CX0000FF)
・CMYK (00FFFF00,FF00FF00,FFFF0000)
・HLS (H07880FF,H0F080FF,H00080FF)
・HSV , またはHSB (V000FFFF,V078FFFF,V0F0FFFF)
・Gray scale (GRAYFF,GRAYC0,GRAY40)
ここで、それなりに馴染みがあって自由度が高そうなRGB値というものがあります。
CXFF0000など例を挙げていますが、16進数の値になっており、
もちろんこれはRGB値から変換された値になります。
それではこのRGB値から変換してもらうマクロを作れば様々な色に対応できる!
ということで、実際このマクロを作成している方がいらっしゃいました。
それがRickさんのRGBマクロになります。以下そのブログのリンクです。
https://blogs.sas.com/content/iml/2012/10/22/whats-in-a-name.html
%macro hex2(n);
%local digits n1 n2;
%let digits = 0123456789ABCDEF;
%let n1 = %substr(&digits, &n / 16 + 1, 1);
%let n2 = %substr(&digits, &n - &n / 16 * 16 + 1, 1); &n1&n2
%mend hex2;
%macro RGB(r,g,b);
%cmpres(CX%hex2(&r)%hex2(&g)%hex2(&b))
%mend RGB;
こんな短いプログラムになっています。
それではこのマクロを実行して、好みの?KM曲線にしてみます。
proc sgplot data = sgplot2 noautolegend;
styleattrs datacontrastcolors=(%RGB(0,191,196) %RGB(248,118,109))
datalinepatterns=(1 20)
datasymbols=(triangle circle));
step x=Time y=Survival / group=StratumNum
lineattrs=(thickness=2) name="a" ;
scatter x=Time y=Censored / group=StratumNum
markerattrs=(size=15) ;
xaxistable AtRisk / x=tAtRisk class=StratumNum
valueattrs=(size=13) labelattrs=(size=13)
title="No. at Risk" titleattrs=(size=13);
yaxis values=(0 to 1 by 0.1)
label="Probability of Overall Survival"
valueattrs=(size=13) labelattrs=(size=13);
xaxis values=(0 to 24 by 3) offsetmin=0.03 offsetmax=0.02
label="Time(Months)" valueattrs=(size=13)
labelattrs=(size=13);
keylegend "a" / location = inside position = topright
titleattrs=(size=13)valueattrs=(size=13)
acros=1 noborder ;
format StratumNum treat. ;
run;
完成図は以下になります。
とこんな体裁になります!
今回の投稿はどのグラフにも応用できるので、推移図やvar plotにもお試しください。
次回でKMは最後になります!
信頼区間の帯のプロットについてです。
おわり
0 件のコメント:
コメントを投稿