在以往的数据分析过程中常常需要用proc sgplot绘制堆叠图或者条形图,所以在这里将常用的,好用的代码做一汇总。
(1)颜色的设定
方法一:自己设定颜色的方法以前有一篇已经提到了SAS学习(1)——proc sgplot做图指定各组格式、颜色_wwwww_t的博客-CSDN博客_sas sgplot利用SAS作图时会遇到https://blog.csdn.net/weixin_49282401/article/details/118093238?spm=1001.2014.3001.5501首先先用如下代码设定不同的分组对应的颜色:
data myattrmap;
length linecolor $ 14 fillcolor $ 14;
input ID $ value $ linecolor $ fillcolor $; /*这里的ID是分组*/
datalines;
myid A steelblue steelblue
myid B skyblue skyblue
myid C lightsteelblue lightsteelblue
/*steelblue、skyblue以及lightstellblue为深浅不一的蓝色的名字,可以按需替换*/
;
run;
接下来,需要在proc sgplot语句中插入以下标红的代码:
proc sgplot data=test pctlevel=group dattrmap=myattrmap;
styleattrs datacolors=(steelblue skyblue lightsteelblue) ;
by region;/*注意要提前使用proc sort排序*/
hbar province / group=type/*分组变量*/
groupdisplay=stack /*绘制堆叠式百分条图*/
attrid=myid
stat=percent
categoryorder=respdesc
datalabel datalabelattrs=(Family=Arial Size=8 Style=Italic Weight=Bold)
seglabel seglabelattrs=(color=white size=10 weight=bold);/*设置各种字体及格式*/
run;
这样就可以实现改变图中不同分组的颜色的目标啦
方法二:
另外发现在vbar statement后的fillattrs也可改变柱状图的颜色,同时,用这个option也可改变透明度,具体代码为
fillattrs=(color=CX13478C transparency=0.5 );/*补充指定颜色,设置透明度为0.5*/
我在这里输入颜色用的是RGB,SAS中支持多种形式的颜色输入,如下:
具体内容可以在SAS帮助文档中《Color-Naming Schemes》中找到
(2)汇总内容
因为其他代码较为琐碎,所以这里采用一段长代码,用注释的方式进行展示:
这里就是对所有的代码进行汇总展示,只需要看每一个语句的功能按需取用即可,
一般的条形图都应该如下的代码都可以满足的
ods listing
gpath="C:\Users\Desktop"
image_dpi=300 style=Journal;/*设置图片导出位置、DPI以及格式*/
ods graphics / imagename="Figure S1" width=20cm height=16cm border=off;
/*设置图片名称、大小(长、宽)以及导出的图片之间有没有边框*/
proc sgplot data=test;
vbar age/
response=COL1/*指定包含数据的变量*/
group=growth/*设置分组*/
GROUPDISPLAY = CLUSTER/*设置显示形式,stack是堆叠图,cluster是复式条形图*/
fill/*设置颜色全部填充,因为有时候可能出现柱状图内是一个颜色,边框是另一个颜色的情况*/
datalabel DATALABELATTRS=(style=normal size=10)/*柱状图上加上数值,并设置字体和大小*/
;
KEYLEGEND /position=bottom title='Growth outcomes'/*针对有分组变量的图,对不同组指示的设置,position表示图例展示的位置*/;
xaxis
label=" age (year)";/*设置x轴标签*/
yaxis
display=(noline)/*指定显示在轴上哪些特征,noline隐藏轴线,nolabel隐藏轴标签,还有
noticks和novalues,按需取用*/
grid/*设置网格线*/
label="Freqency of different egg initiation infant"/*设置y轴标签*/
values=(0 to 18 by 2)/*如果y轴是连续变量,可以设置间距,比如这个就是0到18,每2个做标记*/;
run;
暂做汇总如上,欢迎大家补充~
如果有错漏欢迎大家一起讨论哦~