用SAS实现商业周刊经典风格 对绘图背景进行隔行填色

商业周刊的经典风格。

data ex;
input x y g color $;
cards;
1 2 1  Yahoo!
1 4 2 Google
2 5 1 Yahoo!
2 8 2 Google
4 12  1 Yahoo!
4 10 2 Google
5 9  1 Yahoo!
5 7 2 Google
;
data title_anno;
when=’b’; xsys=’3′; ysys=’3′; style=’solid’;
function=’move’; x=0; y=87;  output;
function=’bar’; x=100; y=100; color=’black’; output;
run;
data range_anno;
when=’b’; xsys=’1′; ysys=’1′; style=’solid’;
function=’move’; x=0; y=0; output;
function=’bar’;  x=100; y=20; color=”cxFFFBDD”;output;
function=’move’; x=0; y=20; output;
function=’bar’; color=”cxEEE3B4″; x=100; y=40; output;
function=’move’;x=0; y=40; output;
function=’bar’; color=”cxFFFBDD”; x=100; y=60; output;
function=’move’;x=0; y=60; output;
function=’bar’; color=”cxEEE3B4″; x=100; y=80; output;
function=’move’;x=0; y=80; output;
function=’bar’; color=”cxFFFBDD”; x=100; y=100; output;
run;
data range_anno1;
when=’b’; xsys=’1′; ysys=’1′;
function=’move’; x=0; y=20; output;
function=’bar’;  x=100; y=20; color=”cxD6CECD”;output;
function=’move’; x=0; y=40; output;
function=’bar’; color=”cxD6CECD”; x=100; y=40; output;
function=’move’;x=0; y=60; output;
function=’bar’; color=”cxD6CECD”; x=100; y=60; output;
function=’move’;x=0; y=80; output;
function=’bar’; color=”cxD6CECD”; x=100; y=80; output;

run;
data range_anno;
set range_anno range_anno1;
run;
FILENAME file “c:\bussiness.png”;
GOPTIONS reset=all noborder  Cback=”cxEEE3B4″ device=png  gsfname=file
vsize=7cm hsize=7cm
ymax=8cm xmax=9cm
htext=1.5   ;
axis1  major=none width=2 label=none  REFLABEL=none value=(h=1 color=black “Q1” “Q2” “Q3” “Q4″ ) offset=(4,4);
axis2 color=black width=2 label=none order=(0 to 13 by 4) minor=none major=(h=1)  value=(h=1.0) offset=(0,2);
axis3 major=none label=none value=none;
pattern1 v=s color=’cxFF8E00′;
pattern2 v=s color=’cx004C7A’;
title j=l BCOLOR=black  COLOR=white h=3.5 font=CENTB  ” Bussniess weekly style”;
title2 j=l ” Internation compsdfdsfsfd”;
title3 j=l ” asdfd asdfdf dfsdfsd”;
legend1 label=none value=(HEIGHT=1.2 ‘Yahoo!’ ‘Google’ )  POSITION=(inside middle )  OFFSET=(-11,2.5)
shape=bar(.1in,.1in);

proc gchart data=ex anno=title_anno;
vbar g / discrete       type=sum
sumvar=y
maxis=axis1 raxis=axis2 GAXIS=axis3
coutline=gray33  caxis=”cxD6D3B8″
width=4
space=0
gspace=0
subgroup= color
group=x
legend=legend1
anno=range_anno ;
footnote justify=l h=1 font=swiss ”  Data from **group”;
footnote2 justify=l h=1 font=swiss ”  http://sxlion.blog.sohu.com”;
run;
quit;

下面是excelpro博客介绍的经典商业周刊风格的图表,对比一下相差无几。

这代码是相当的复杂,调试也比较费功夫。

本来准备在sgplot的band语句画区域作为背景来实现的,但是由于存在bar图与band不兼容的情况,于是只好转向anno了。见SAS公司详细说明

There are four basic types of plots that you can create with the SGPLOT procedure:

Basic plots
scatter, series, step, band, needle, and vector plots
Fit and confidence plots
loess, regression, and penalized B-spline curves, and ellipses
Distribution plots
box plots, histograms, and normal and kernel density estimates
Categorization plots
dot plots, bar charts, and line plots

Not all of the plot types can be used together in the same PROC SGPLOT step. The following table shows which of the plot types can be used together

data ex;
input x y ;
cards;
1 2
2 7
4 12
5 11
6  9
7  8
;
title ;
footnote;
proc sgplot data=ex noautolegend;
SERIES  x=x y=y/LINEATTRS=(color=blue thickness=6) ;
band x=x lower=0 upper=2.5 / OUTLINE  transparency=.8 LINEATTRS=(color=black) fillattrs=(color=cxEEE3B4) NOOUTLINE;
band x=x lower=2.5 upper=5  / OUTLINE transparency=.7 LINEATTRS=(color=black) fillattrs=(color=orange) NOOUTLINE;
band x=x lower=5 upper=7.5 /OUTLINE transparency=.8 LINEATTRS=(color=black) fillattrs=(color=cxEEE3B4) NOOUTLINE;
band x=x lower=7.5 upper=10  / OUTLINE transparency=.7 LINEATTRS=(color=black) fillattrs=(color=orange) NOOUTLINE;
band x=x lower=10 upper=12.5 /OUTLINE transparency=.8 LINEATTRS=(color=black) fillattrs=(color=cxEEE3B4) NOOUTLINE;
yaxis values=(0 to 12 by 3)   min=0   max=13 valueshint;
xaxis values=(0 to 8 by 2)   min=0   max=8 valueshint;
run;


相关博文

发表评论

电子邮件地址不会被公开。 必填项已用*标注