通过实例学SAS(12)--产生高质量图形
1.基本概念
有一些关于图形的全局选项,如SYMBOL,PATTERN.在你改变这些设置之前,这些设置会一直起作用。有可能会忘了以前的设置,那么在产生新图形之前,加入语句RESET=all会将所有设置修改为缺省值,当然也会修改TITLE和FOOTNOTE为缺省值。例如下面是一个关于图形的基本设置。
goptions reset=all
ftext='arial'
htext=1.0
ftitle='arial/bo'
htitle=1.5
colors=(black);
2.使用GCHART产生条形图
下面是一个示例如何产生blood的分布图
title "Distribution of Blood Types";
pattern value=empty;
proc gchart data=learn.blood;
vbar BloodType;
run;
quit;
PATTERN语句设置条形图填充为空。而VBAR产生垂直条形图,当然还有其它选项
HBAR 水平放置的条形图
VBAR3D 三维垂直条形图
HBAR3D 三维水平条形图
PIE 饼图
PEE3D 三维饼图
DONUT 圆环图
STAR 星图
对连续变量也能产生条形图。SAS对每个bar自动产生分点(midpoint),大多数情况下,还是自已设置分点的为好。例如
pattern value=L2;
title "Distribution of WBC's";
proc gchart data=learn.blood;
vbar WBC / midpoints=4000 to 11000 by 1000;
format WBC comma6.;
run;
另外一种情况,是将每个数值当作一类,即将连续变量当作分类变量,作图的方式为
title "Visits by Month of the Year";
pattern value=R1;
proc gchart data=day_of_week;
vbar Day / discrete;
run;
Gchart创建条形图,其高度代表某些统计量的值。例如,下述代码统计各地区的销售总额。
title "Total Sales by Region";
pattern1 value=L1;
axis1 order=('North' 'South' 'East' 'West');
proc gchart data=learn.sales;
vbar Region / sumvar=TotalSales
type=sum
maxis=axis1;
format TotalSales dollar8.;
run;
quit;
其中sumvar=指定统计变量,type=指定统计类型,若设为mean,则统计的是平均值了。
有两种方式在图中加入另外一个变量。一种方式是使用Group=选项。例如
title "Average Cholesterol by Gender";
pattern1 value=L1;
proc gchart data=learn.blood;
vbar Gender / sumvar=Chol
type=mean
group=BloodType;
run;
quit;
相当于是在x轴上对变量进行了再一次分组。
另一种方式是加入subgroup=,在每个条形图上用不同的图案表示分组。例如
title "Average Cholesterol by Gender";
pattern1 value=L1;
pattern2 value=R3;
proc gchart data=learn.blood;
vbar BloodType / subgroup=Gender;
run;
quit;
3.散布图
使用proc gplot产生散布图(scatter plot),以表明x和y的关系。加入SYNBOL表达式,选择一种符号以连接点,可以是直线,曲线,甚至可以是回归直线。下面代码产生一个简单的散布图。
title "Scatter Plot of SBP by DBP";
proc gplot data=learn.clinic;
plot SBP * DBP;
run;
修改x轴和y轴及点的形式
title "Scatter Plot of SBP by DBP";
symbol value=dot;
proc gplot data=learn.clinic;
plot SBP * DBP / haxis=70 to 120 by 5
vaxis=100 to 220 by 10;
run;
以symbol语句将各点以直线或曲线连接起来。例如
title "Scatter Plot of SBP by DBP";
title2 h=1.2 "Interpolation Methods";
symbol value=dot interpol=join width=2;
proc gplot data=learn.clinic;
plot SBP * DBP;
run;
join表明以直线连接,width控制线的宽度。将join改为sm(代表smooth),表明将以光滑曲线连接各点。在作图前,一般要对数据排序。将sm改为sms,这一步就省了。例如
title "Scatter Plot of SBP by DBP";
title2 h=1.2 "Interprelation Methods";
symbol value=dot interpol=sms line=1 width=2;
proc gplot data=learn.clinic;
plot SBP * DBP;
run;
浙公网安备 33010602011771号