GTL
GTL(Graph Template Language)
proc template无法更新
path(prepend) work.templat(update); ods
GTL控制分组属性
通过discreteattrmap预定义分组属性
="backcolor";
discreteattrmap name"1"/ fillattrs=(color=gray ) markerattrs=(color=gray symbol=circlefilled) lineattrs=(color=gray);
value "2"/ fillattrs=(color=blue ) markerattrs=(color=blue symbol=circlefilled) lineattrs=(color=blue);
value
enddiscreteattrmap;=backgroup var=grp attrmap="backcolor"; discreteattrvar attrvar
并在后续代码中调用该属性,如group=backgroup选项:
=xp1 y=aval / name='scatter' markerattrs=( size=3 ) group=backgroup; scatterplot x
通过proc template修改style重定义属性
使用discreteattrmap无法分组实现带有画线的属性,如下图:
使用proc template修改style,可以设置多个GraphData1-GraphDataN为多个分组设置不同属性,其中的fillpattern可以设置柱状图中的划线。另外GTL默认输出的图形的坐标轴往往是灰色的线条,而sgplot中默认的是黑色实线,可设置 contrastcolor=black改成黑色实线。
proc template;
define style tlout;=styles.htmlblue;
parent/
style graphwalls from graphwalls =on
frameborder=1
linestyle=1px
linethickness=GraphColors("gwalls")
backgroundcolor= white;
contrastcolor
/
style graphaxislines from graphaxislines =1
linestyle=1px
linethickness=black;
contrastcolor
replace GraphFonts "Fonts used in graph styles" /
'NodeDetailFont' = ("Arial",7pt,bold)
'NodeLinkLabelFont' = ("Arial",9pt,bold)
'NodeInputLabelFont' = ("Arial",9pt,bold)
'NodeLabelFont' = ("Arial",9pt,bold)
'NodeTitleFont' = ("Arial",9pt,bold)
'GraphDataFont' = ("Arial",7pt,bold)
'GraphUnicodeFont' = ("Arial",9pt,bold)
'GraphValueFont' = ("Arial",9pt,bold)
'GraphLabel2Font' = ("Arial",10pt,bold)
'GraphLabelFont' = ("Arial",10pt,bold)
'GraphFootnoteFont' = ("Arial",10pt,bold)
'GraphTitleFont' = ("Arial",11pt,bold)
'GraphTitle1Font' = ("Arial",14pt,bold)
'GraphAnnoFont' = ("Arial",10pt,bold);
/
replace GraphData1 = "R1"
fillpattern = grey
color = grey
contrastcolor
; /
replace GraphData2 = "NA"
fillpattern = grey
color = grey
contrastcolor
; /
replace GraphData3 = "R1"
fillpattern = blue
color = blue
contrastcolor
; /
replace GraphData4 = "NA"
fillpattern = blue
color = blue
contrastcolor
; /
replace GraphData5 = "R1"
fillpattern = red
color = red
contrastcolor
; /
replace GraphData6 = "NA"
fillpattern = red
color = red
contrastcolor
;
end; run;
GTL控制X,Y轴属性
Y轴实现101, 102 ,103 …
首先定义这一类数字在10的右肩上的format
proc format;
value yfmt1="10(*ESC*){Unicode '2070'x}"
10="10(*ESC*){Unicode '00B9'x}"
100="10(*ESC*){Unicode '00B2'x}"
1000="10(*ESC*){Unicode '00B3'x}"
10000="10(*ESC*){Unicode '2074'x}"
100000="10(*ESC*){Unicode '2075'x}"
; run;
并在yaxisopts语句中定义刻度值的属性字体为Arial Unicode MS,最终呈现结果如GTL控制分组属性中的图所示。
=(offsetmax=0 offsetmin=0 display=( LINE ticks tickvalues) type=log
yaxisoptslogopts=( viewmin=1 viewmax= 10000 base=10 tickintervalstyle=logexpand minorticks=true tickvalueformat=yfmt.)
labelattrs=( size=9 color = black weight=bold) tickvalueattrs=(size=10pt weight=bold family='Arial Unicode MS'));
GTL绘制折线图
seriesplot plot绘制折线图,groupdisplay=cluster可以控制折线在访视点左右散开,以及设置clusterwidth控制左右散开的程度。
proc template;
define statgraph sgdesign;
begingraph;
layout overlay / walldisplay=(FILL)
xaxisopts=( label=('访视') labelattrs=(size=12 family = "楷体" weight=bold)
discreteopts=(tickvaluefitpolicy=splitrotate) offsetmin=0.04 offsetmax=0.04
tickvalueattrs=(size=10pt weight=bold family='楷体')
display=(label LINE TICKVALUES ))
yaxisopts=( label=('PASI较基线改善情况') labelattrs=(size=12 family = "楷体" weight=bold)
linearopts=(viewmin=0 tickvaluesequence=( start=0 end=100 increment=10))
tickvalueattrs=(size=10pt weight=bold family='Arial Unicode MS')
display=(label LINE ticks tickvalues));
seriesplot x=avisit y=mean / group=anagrpn name='series' yerrorlower=lmean yerrorupper=umean groupdisplay=cluster clusterwidth=0.3 connectorder=xaxis display=(markers) lineattrs=(pattern=SOLID );
discretelegend 'series' / opaque=false border=false halign=right valign=bottom displayclipped=true across=1 order=rowmajor location=inside;
endlayout;
endgraph;
end;
run;
GTL绘制柱状图
barchart plot绘制柱状图,groupdisplay=Stack设置为堆积图
proc template;
define statgraph sgdesign;
begingraph/ pad=(left=30);;
discreteattrmap name="barcolor";
value "1"/ fillattrs=(color=gray ) ;
value "2"/ fillattrs=(color=blue ) ;
value "3"/ fillattrs=(color=red ) ;
enddiscreteattrmap;
discreteattrvar attrvar=bargroup var=atoxgrn attrmap="barcolor";
legenditem type=fill name="fill1" / fillattrs=(color=gray) filldisplay=(fill) label="Grade 1";
legenditem type=fill name="fill2" / fillattrs=(color=blue) filldisplay=(fill) label="Grade 2";
legenditem type=fill name="fill3" / fillattrs=(color=red) filldisplay=(fill) label=">=Grade 3";
layout overlay / walldisplay=(FILL)
xaxisopts=( discreteopts=( tickvaluefitpolicy=ROTATE tickvaluerotation=diagonal2 tickvalueformat=$xfmt. /*tickvaluefitpolicy=rotatealways tickvaluerotation= vertical*/)
tickvalueattrs=(size=10pt weight=bold) display=( LINE TICKVALUES ))
yaxisopts=(offsetmax=0 offsetmin=0 display=( LINE ticks tickvalues) labelattrs=(size=14 weight=bold) labelfitpolicy=SPLITALWAYS labelsplitchar="@"
tickvalueattrs=(color=black size=10pt weight=bold family='Arial')
linearopts=( viewmin=0.0 viewmax=100.0 tickvaluesequence=(start=0 end=100 increment=10.0) )
);
barchart category=order response=pct / group=bargroup name='bar' display=(fill) stat=mean barwidth=0.85 groupdisplay=Stack clusterwidth=1.0 grouporder=data ;
discretelegend 'fill3' 'fill2' 'fill1'/ opaque=true border=false halign=left valign=top displayclipped=true across=1 order=rowmajor location=inside valueattrs=(size=12pt);
annotate;
endlayout;
endgraph;
end;
run;
GTL绘制森林图
forest plot绘制森林图,其他的所有label通过annotation实现。
proc template;
define statgraph sgdesign;
begingraph / pad=(top=40 bottom=5);
layout overlay / walldisplay=(FILL)
yaxisopts=(display=NONE reverse=true offsetmax=0.01 offsetmin=0.01 linearopts=( viewmin=0
viewmax=23
))
xaxisopts=(offsetmin=0.4 offsetmax=0.2 display=(TICKS TICKVALUES) type=log logopts=( viewmin=0.1 viewmax= 10
base=10 tickintervalstyle=logexpand minorticks=true tickvalueformat=xfmt.) tickvalueattrs=(size=12pt weight=bold family='Arial Unicode MS'));
scatterplot x=means y=yord / xerrorupper=yerru xerrorlower=yerrl markerattrs=(size=5 symbol=circlefilled color=black) errorbarattrs=(color=black thickness=1);
referenceline x=1 /datatransparency=0.4;
annotate;
endlayout;
endgraph;
end;
run;
如果想要间隔一行加一条浅色的背景色块,可以通过referenceline y=ref /datatransparency=0.8 lineattrs=(thickness=20 color=grey);实现。
proc template;
define statgraph sgdesign;
begingraph / pad=(top=40 bottom=5);
layout overlay / walldisplay=(FILL)
yaxisopts=(display=NONE reverse=true offsetmax=0.01 offsetmin=0.01 linearopts=( viewmin=0
viewmax=23
))
xaxisopts=(offsetmin=0.4 offsetmax=0.2 display=(TICKS TICKVALUES) type=log logopts=( viewmin=0.1 viewmax= 10
base=10 tickintervalstyle=logexpand minorticks=true tickvalueformat=xfmt.) tickvalueattrs=(size=12pt weight=bold family='Arial Unicode MS'));
scatterplot x=means y=yord / xerrorupper=yerru xerrorlower=yerrl markerattrs=(size=5 symbol=circlefilled color=black) errorbarattrs=(color=black thickness=1);
referenceline x=1 /datatransparency=0.4;
referenceline y=ref /datatransparency=0.8 lineattrs=(thickness=20 color=grey);
annotate;
endlayout;
endgraph;
end;
run;