通过GPLOT过程制作图形

通过GPLOT过程制作图形

和数据报表一样,图形也是展现数据的重要方法,图形的直观效果是数据报表无法替代的。SAS/GRAPH是SAS进行数据可视化展现的重 要组成部分,具有强大的作图功能。可以展现的图形包括以下这些:

  • ·散点图与连线图(PLOTS)
  • ·图表(CHARTS)
  • ·地图(MAPS)
  • ·三维图(3D GRAPHICS)
  • ·幻灯片(TXET SLIDES)

 

主要介绍SAS/GRAPH中两个基本的作图过程:作图过程(GPLOT)和图表过程(GCHART)。读者有兴趣可以参考SAS帮助文档学习更多的作图过程。

使用GPLOT过程可以制作平面的散点图和连线图。平面的散点图 就是以数据集中某两个变量作为纵坐标和横坐标,以每个观测为一个数 据点,数据集中的多个观测就形成一幅散点图,连线图就是将分散的数 据点用直线或者曲线连接起来。散点图和连线图在分析比较数据的趋势时比较常用。

1 制作散点图

使用GPLOT过程制作散点图的基本语法如下:

PROC  GPLOT  DATA=数据集;
PLOT  纵坐标变量*横坐标变量;
RUN;
PLOT语句;
…
RUN; 
QUIT;

一个GPLOT过程中可以使用多个RUN语句,并以QUIT语句结尾。 每个RUN语句中也可以使用多个PLOT语句。

  • ·在一个PROC语句中使用多个RUN语句,可以针对不同的图形使用 不同的WHERE语句,利用全局语句定义不同的标题、脚注、坐标轴等 属性。在SAS/GRAPH中GPLOT、GCHART、GMAP和GSLIDE支持使 用多个RUN语句。
  • ·QUIT语句表示结束该PROC步。如果在RUN语句后面出现其他的PROC步或者DATA步,该PROC步也会自动结束。

数据集ex.sales_year中包含了某公司自1998年至今在北美和 欧洲的销售数据(交易数量和销售金额)。其中变量如下:年份(Year)、N_Transactions(北美的交易数量)、N_Amount(北美的销售金额)、E_Transactions(欧洲的交易数量)、E_Amount(欧洲的销 售金额)。要求制作一个散点图,显示每年的北美销售金额。

proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  in  North  America';
plot  N_Amount*Year;
run;
quit;

 这是最简单的散点图,横坐标为Year,纵坐标为N_Amount,图形的元素都使用系统的默认设置,每个数据在图上显示为一个“+”号。

1.选项RESET=

由于图形的展现涉及的方面很多,包括颜色、线型、字体等,因此 图形选项也很多,在制作图形时可以使用GOPTIONS语句来控制各种选项。在开始学习制作图形时,不妨使用选项RESET=ALL,它可使所有的图形选项都恢复系统默认的设置。需要注意的是,在使用该选项之 后,TITLE语句与FOOTNOTE语句中指定的标题和脚注也将被取消。

2.使用TITLE和FOOTNOTE语句设置标题和脚注和前面制作报表一样,在作图时也可以使用TITLE语句和FOOTNOTE语句在图形上加入标题和脚注。需要注意的是,在 SAS/GRAPH中,TITLE语句和FOOTNOTE语句除了可以设定标题和脚 注的内容以外,还可以对其字体、大小、颜色进行设定。

在制作图形时,TITLE语句和FOOTNOTE语句的使用形式如下:

TITLEn  选项 '标题内容'; 
FOOTNOTEn 选项 '脚注内容';

其中n=1~10,缺省时,n默认取值为1。TITLEn和FOOTNOTEn的更 新和置换规则和5.2.3节中介绍的一样。 

将所有TITLE语句和FOOTNOTE语句恢复默认设置的方法有以下两 种:

  • ·GOPTIONS RESET=(TITLE FOOTNOTE);
  • ·GOPTIONS RESET=GLOBAL;

TITLE语句和FOOTNOTE语句的常用选项

3.使用SYMBOL语句设置散点属性

在图5.27中,如果希望输出的数据在图上显示为一个红色的圆点,该如何进行设置呢?这时需要使用SYMBOL语句。在GPLOT过程中, SYMBOL语句用来设置散点的符号、颜色等属性。使用形式如下:

SYMBOLn  选项;

其中,n是不同SYMBOL的序号,取值为1~255,缺省时默认取值1。SYMBOL语句和TITLE语句一样是全局语句,可以出现在PROC步 前面或PROC步的程序中间。

将某个SYMBOL语句恢复为默认设置的方法如下:

SYMBOLn;

将所有SYMBOL语句都恢复为默认设置的方法如下:

GOPTIONS  RESET=SYMBOL;

在上例的散点图中,将散点符号换成红色的“.”。 示例代码如下:

symbol  value=dot  cv=red;
proc  gplot  data=ex.sales_year;
title  f='Albany  Amt'  c=blue  h=3   u=2   'Yearly  Amount  in  North  America';
footnote  j=r  'Optimization  Solution  Co.  Ltd';
plot  N_Amount*Year;
run;
quit;
goptions  reset=all;

以上程序使用SYMBOL语句通过选项VALUE=将散点符号设置为圆 点(.),通过选项CV=将散点颜色设置为红色。并且利用TITLE语句和 FOOTNOTE语句设置了标题和脚注的文字和属性。

可在SYMBOL语句中用不同的选项来设置不同的属性,下表SYMBOL语句中用于设置散点属性的选项。

 

2 制作连线图

SYMBOL语句可以使用选项INTERPOL=制作连线图。语法如下:

SYMBOLn INTERPOL=插值方法;

选项INTERROL=可以简写为I=。其中插值方法主要有以下几种。

  • ·NONE:表示不作连线图,这是系统默认取值。
  • ·JOIN:表示将数据点按照数据集中出现的顺序用直线连接。
  • ·SPLINE:表示使用光滑的插值曲线将数据点按照数据集中出现的 顺序连接起来,并且使得曲线经过每个数据点。
  • ·SMnn:表示用光滑的插值曲线来拟合数据点,曲线可以不经过数据点,nn的取值为0~99,取值越大,插值曲线的光滑程度越高。
  • ·Rxyzzzmm:表示根据数据点作回归线,x表示回归类型,取值为L、Q、C;y表示回归线是否过数据点,取值为0、1;zzz表示置信限,取值为CLM、CLI;mm表示置信水平。
  • ·NEEDLE:表示针对每个点画一条从点到横坐标轴的连线。
  • ·STEPxyz:表示制作阶梯图,x表示数据点在阶梯上的位置,取值为L、R、C;y表示是否用竖线连接各阶梯;z表示是否对数据按横坐标 变量排序。

同时,SYMBOL语句中还提供了更多的选项来控制连线线型、粗 细、颜色等属性。如表所示是SYMBOL语句中常用的设置连线属性的选项。 

 

下面将上图的散点用蓝色的实线连接起来。示例代码如 下:

symbol  value=dot  cv=red interpol=join  ci=blue;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  in  North  America';
plot  N_Amount*Year;
run;
quit;
goptions  reset=all;

当定义了多个SYMBOL语句时,可以使用以下语法来指定图形使用 特定的SYMBOL语句设置的属性:PLOT纵坐标变量*横坐标变量=n;

该语句表示该散点图使用SYMBOLn设置的属性。

1.使用选项HAXIS=和VAXIS=控制坐标轴取值范围

在上图中,可观察到横坐标的取值范围为1990~2020。其实我们 的数据集中年份截止到2012年。如果想使得图形中横坐标的取值范围为1990~2012,该如何设置呢?作图语句中提供了选项HAXIS=和选项VAXIS=,可以用来分别设定横坐标和纵坐标的取值范围。如:

symbol  value=dot  cv=red interpol=join  ci=blue;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  in  North  America';
plot  N_Amount*Year  /haxis=1990  to  2012 by   5;
run;
quit;
goptions  reset=all;

除了这样直接定义坐标轴的取值范围以外,还可以通过AXIS语句 来进行这一操作。AXIS语句除了可以设定坐标轴范围,还可以对坐标 轴进行更加丰富的设置。

2.使用AXIS语句设置坐标轴属性

通过AXIS语句可以设定坐标轴的刻度范围、颜色、描述标签、每 两个主刻度中间次刻度的个数等属性。和SYMBOL语句一样,AXIS语 句也是全局语句,它也可以用于其他作图过程中坐标轴的设置。AXIS语句的形式如下:

AXISn  选项;

其中,n是不同AXIS的序号,取值为1~99,缺省时默认取值为1。 SYMBOL语句和TITLE语句一样是全局语句,可以出现在PROC步前面 或PROC步的程序中间。

将某个AXIS语句恢复为默认设置的方法如下:

AXISn;

将所有AXIS语句都恢复为默认设置的方法如下:

GOPTIONS  RESET=AXIS;

GPLOT过程中使用AXIS语句的形式如下:

PROC  GPLOT  DATA=数据集;
PLOT  纵坐标变量*横坐标变量 /HAXIS=AXISn  VAXIS=AXISm;
AXISn  选项;
RUN;
QUIT;

其中,HAXIS=AXISn指明纵坐标用AXISn语句设定的属性, VAXIS=AXISm指明横坐标用AXISm语句设定的属性,AXISn语句可以 出现在PROC步前面或者PROC步中间。

在以下的连线图中对横坐标和纵坐标的主刻度和次刻度进行设定。 示例代码如下:

axis1   order=(1990  to  2012 by   5)  ;
axis2   order=(13000  to  20000 by   1000)
minor=(color=blue  height=0.25  number=1);
symbol  value=dot  cv=red interpol=join  ci=blue;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  in  North  America';
plot  N_Amount*Year/haxis=axis1  vaxis=axis2;
run;
quit;
goptions  reset=all;

在上面的程序中,先通过AXIS语句设置了AXIS1和AXIS2,在 AXIS1中规定坐标轴的取值为1990~2012,每5个点一个主刻度,每个主 刻度中间有一个次刻度,次刻度显示为蓝色,同理还定义了AXIS2。在 PLOT语句中,使用选项HAXIS=AXIS1和VAXIS=AXIS2分别指定了横 坐标和纵坐标调用AXIS1和AXIS2设置的属性。

AXIS语句中的选项很多,用法也非常丰富,这里简单罗列了一些 常用的选项及用法示例

 

3 制作多幅图形

前面提到在一个GPLOT过程中可以使用多个PLOT语句,这时每个 语句都可以制作一幅单独的图形。其实,使用一个PLOT语句也可以制 作多幅图形。使用语法如下:

PLOT  纵坐标变量1*横坐标变量1   纵坐标变量2*横坐标变量2   <  …   / 选项>;

绘制北美销售金额连线图和欧洲销售金额连线图。 示例代码如下:

axis1   order=(1990  to  2012 by   5) minor=(color=blue  number=1);
axis2   order=(13000  to  20000 by   1000) minor=(color=blue  height=0.25  number=1);
symbol  value=dot  cv=red interpol=join  ci=blue;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  Series';
plot  N_Amount*Year  E_Amount*Year/haxis=axis1  vaxis=axis2;
run;
quit;
goptions  reset=all;

 

输出内容如图5.31所示。 上述程序制作了两幅图,第一幅是由PLOT语句中的N_Amount*Year制作的,第二幅是由E_Amount*Year制作的,两幅图上 横纵坐标的尺度都相同。

为了进行比较,有时需要将多条连线绘制在同一幅图形中。例如, 为了比较北美和欧洲的销售及变化趋势,除了上面的做法,更方便的是 将北美和欧洲的销售连线图画在同一幅图形中。又如在进行时间序列分 析时,为了比较预测值和实际值的趋势及大小,也需要在同一幅图中比较。

 

在同一幅图形中绘制多条连线有以下3种方法:

  • ·使用选项OVERLAY叠加图形。
  • ·使用PLOT2语句叠加图形。
  • ·使用分组变量制作多条连线图。 下面将具体介绍每种方法及其使用场景,读者可以根据具体的数据集选用不同的方法。

 1.使用选项OVERLAY叠加图形(单轴

使用选项OVERLAY可以将同一个PLOT语句中的多个图形展现在 同一幅图形中。

将上例中的两条连线绘制在同一图形中。 示例代码如下:

axis1   order=(1990  to  2012 by   5) minor=(color=blue  number=1);
axis2   order=(13000  to  20000 by   1000) minor=(color=blue  height=0.25  number=1);
symbol1  value=dot  cv=red interpol=join  ci=red;
symbol2  value=#  cv=green  interpol=join  ci=green  line=4;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  Series';
plot  N_Amount*Year  E_Amount*Year/overlay  legend  haxis=axis1  vaxis=axis2;
run;
quit;
goptions  reset=all;

由于两个连线在同一图形中,系统约定由SYMBOL1语句设定第一条连线,SYMBOL2语句设定第二条连线。所以当有多条连线时,应该 以不同序号的SYMBOL语句分别设定相应的连线属性。

 

除非特别指定,否则每个SYMBOL语句设定的属性在一个作图过程中只使用一次。

当同一图形中有多条连线时,为了区分连线的含义,需要使用选项 LEGEND添加图例。上述程序中,通过图形下方的图例,可以很清楚地 区分红线代表北美的销售额,黄线代表欧洲的销售额。

 2.使用PLOT2语句叠加图形(双轴

使用PLOT2语句可以为其所指定的纵坐标变量在图的右侧设立一条 垂直坐标轴,这样不同的纵坐标变量就可以使用不同的纵轴尺度。 PLOT2语句的使用方法和PLOT语句一样。使用语法如下:

PLOT2  纵坐标变量1*横坐标变量1   <纵坐标变量2*横坐标变量2     …   >  </  选项>;
axis1    order=(1990  to  2012 by   5) minor=(color=blue  number=1);
axis2    order=(13000  to  20000 by   1000) minor=(color=blue  height=0.25  number=1);
axis3    major=(number=8) minor=(number=1);
symbol1  value=dot  cv=red interpol=join  ci=red;
symbol2  value=diamond  cv=green  height=2  interpol=join  ci=green  line=10;
proc  gplot  data=ex.sales_year;
title  'Yearly  Amount  Series';
plot  N_Amount*Year  /legend  haxis=axis1  vaxis=axis2;
plot2  N_Transations*Year/legend  vaxis=axis3;
run;
quit;
goptions  reset=all;

在上述程序中,需要注意以下几点:

  • ·在GPLOT过程中使用PLOT2语句时,必须使用PLOT语句。
  • ·如果需要显示所有图形的图例,需要在PLOT语句和PLOT2语句中 都使用选项LEGEND
  • ·使用PLOT2语句,可以使用选项VAXIS=专门设定右边坐标轴的属性。

3.使用分组变量制作多条连线图

前面在介绍叠加图形时可看到,不同图形的纵坐标变量都存储在数 据集中的不同字段下。当纵坐标变量的数据都存储在数据集中的同一字 段下时,如何制作多条连线图?这时就需要指定第3个变量,根据第3个 变量的不同取值,在同一幅图中制作多条连线图,也称这第3个变量为 分组变量。其基本语法如下:PLOT纵坐标变量*横坐标变量=分组变量</选项>;当使用分组变量时,系统默认提供图例。  

数据集ex.sales_year_by_area中是全球4个地区的历年销售数量和销售金额的数据,包含4个变量:年份(Year)、销售数量(Transactions)、销售金额(Amount)、地区(Area)。现在要在同 一幅图中制作多条连线图展现每个地区历年销售金额的情况。

示例代码如下:

axis1 order=(1990  to  2012 by   5)
minor=(color=blue  number=1);
axis2 minor=(color=blue  height=0.25  number=1);
symbol  value=:  height=2  interpol=join;
proc  gplot  data=ex.sales_year_by_area;
title  'Yearly  Amount  Series  By  Area';
plot  Amount*Year=Area/haxis=axis1  vaxis=axis2  ;
run;
quit;
goptions  reset=all;

在上述程序中,只使用了一个SYMBOL语句,定义了插值方法、散 点符号和大小,但是没有指定颜色。因此在图形中,每条连线都使用了 相同的散点符号,不一样的颜色。

SYMBOL语句中没有指定颜色时,该语句中定义的属性将被重复使用,颜色按照选项COLORS=中指定的颜色或者系统颜色列表中的颜色依次循环调用。 

4.使用LEGEND语句设置图例属性

当一幅图形中有多条连线时,为了辨识每条连线的含义,可在 PLOT语句中使用选项LEGEND在图形中增加图例,此时选项LEGEND 使用了默认的方式显示图例。这里将介绍如何使用LEGEND语句对图例 的大小、布局、边框、位置及图例中文字的属性进行更加丰富的设置。

LEGEND语句的使用方法如下:

LEGENDn  选项;

其中n=1~99,默认取值为1。LEGEND语句是全局语句,更新规则 和SYMBOL语句一样。

将某个LEGEND语句恢复为默认设置的方法如下:

LEGENDn;

取消所有LEGEND语句的方法如下:

GOPTIONS  RESET=LEGEND;

GPLOT过程中绘制多条连线图时,调用LEGEND语句设置的图 例属性的方法如下:

LEGEND=LEGENDn; 

将例5.28中的图例放在连线图横坐标下面的中间部分,分两排排列,并将图例区加上深蓝的边框和浅蓝的阴影。

示例代码如下:

axis1   order=(1990  to  2012 by   5) minor=(color=blue  number=1);
axis2   minor=(color=blue  height=0.25  number=1);
legend1  cborder=blue  cshadow=lightblue  across=2  position=(bottom  center)  label= (color=lightpurple  height=1.5  font='Courier  New'  'Global');
symbol  value=:  height=2  interpol=join;
proc  gplot  data=ex.sales_year_by_area;
title  'Yearly  Amount  Series  By  Area';
plot  Amount*Year=Area/haxis=axis1  vaxis=axis2  legend=legend1;
run;
quit;
goptions  reset=all;

上述程序中使用LEGEND1语句设置了图例的属性,并在PLOT语句 中调用了LEGEND1。 

4 制作气泡图

GPLOT过程中可以使用BUBBLE语句制作气泡图。基本语法如 下:

BUBBLE  纵坐标变量*横坐标变量=气泡变量  </  选项>  ;

气泡图有3个维度,包括:纵坐标变量、横坐标变量和气泡变量, 它们都是数据集中的变量,其中纵坐标变量和横坐标变量确定气泡的位 置,气泡变量确定气泡的大小,所以气泡变量必须是数值型变量。

利用数据集ex.sales_year制作气泡图,反映欧洲地区历年的 销售情况。

示例代码如下:

axis2   minor=(color=blue  height=0.25  number=1);
proc  gplot  data=ex.sales_year;
title  'Yearly  Sales  Overview';
bubble  E_Amount*Year=E_Transactions/vaxis=axis2 bcolor=red  bsize=12;
where  year>=1999;
run;
quit;
goptions  reset=all;

在上述代码中纵坐标为销售金额,横坐标为年份,销售数量决定了气泡的大小,并且在BUBBLE语句使用了选项BCOLOR=和BSIZE=来设 定气泡的显示属性。在图5.36的方框中,两个气泡分别表示2010年和2011年的销售情况,从销售金额来看,2011年比2010年有所上升(气泡 所处的位置升高),从销售数量来看,2011年比2010年下降了(气泡的 大小变化),由此可以推断,单位数量的销售金额从2010年到2011年提 高了。可见,使用气泡图能更加直观地反映多个维度的信息。

 

posted @ 2019-03-26 10:14  suolilian  阅读(3795)  评论(0编辑  收藏  举报