通过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= u= '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= to by ;
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=( to by ) ;
axis2 order=( to by )
minor=(color=blue height=0.25 number=);
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=( to by ) minor=(color=blue number=);
axis2 order=( to by ) minor=(color=blue height=0.25 number=);
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=( to by ) minor=(color=blue number=);
axis2 order=( to by ) minor=(color=blue height=0.25 number=);
symbol1 value=dot cv=red interpol=join ci=red;
symbol2 value=# cv=green interpol=join ci=green line=;
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=( to by ) minor=(color=blue number=);
axis2 order=( to by ) minor=(color=blue height=0.25 number=);
axis3 major=(number=) minor=(number=);
symbol1 value=dot cv=red interpol=join ci=red;
symbol2 value=diamond cv=green height= interpol=join ci=green line=;
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=( to by )
minor=(color=blue number=);
axis2 minor=(color=blue height=0.25 number=);
symbol value=: height= 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=( to by ) minor=(color=blue number=);
axis2 minor=(color=blue height=0.25 number=);
legend1 cborder=blue cshadow=lightblue across= position=(bottom center) label= (color=lightpurple height=1.5 font='Courier New' 'Global');
symbol value=: height= 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=);
proc gplot data=ex.sales_year;
title 'Yearly Sales Overview';
bubble E_Amount*Year=E_Transactions/vaxis=axis2 bcolor=red bsize=;
where year>=;
run;
quit;
goptions reset=all;
在上述代码中纵坐标为销售金额,横坐标为年份,销售数量决定了气泡的大小,并且在BUBBLE语句使用了选项BCOLOR=和BSIZE=来设 定气泡的显示属性。在图5.36的方框中,两个气泡分别表示2010年和2011年的销售情况,从销售金额来看,2011年比2010年有所上升(气泡 所处的位置升高),从销售数量来看,2011年比2010年下降了(气泡的 大小变化),由此可以推断,单位数量的销售金额从2010年到2011年提 高了。可见,使用气泡图能更加直观地反映多个维度的信息。
通过GPLOT过程制作图形的更多相关文章
-
WPF学习12:基于MVVM Light 制作图形编辑工具(3)
本文是WPF学习11:基于MVVM Light 制作图形编辑工具(2)的后续 这一次的目标是完成 两个任务. 本节完成后的效果: 本文分为三个部分: 1.对之前代码不合理的地方重新设计. 2.图形可选 ...
-
python在linux制作图形界面(snack)
snack是一个用于在linux制作图形界面(GUI)的模块,该模块由c编写,而且redhat的系统都自带这个模块. 1.获取模块 虽然redhat系统会自带这个模块,但是直接去import snac ...
-
通过TABULATE过程制作汇总报表
通过TABULATE过程制作汇总报表 制作基本汇总报表 TABULATE过程的基本语法如下: PROC TABULATE DATA=数据集 <选项>; CLASS 变量1 <变量2变 ...
-
通过PRINT过程制作报表
通过PRINT过程制作报表 PRINT过程是SAS中用于输出数据集内容的最简单常用的过程,它可将选择的观测和字段以简单的矩形表格形式输出. 1.1 制作简单报表 使用PRINT过程最简单的语法形式如下 ...
-
WPF学习11:基于MVVM Light 制作图形编辑工具(2)
本文是WPF学习10:基于MVVM Light 制作图形编辑工具(1)的后续 这一次的目标是完成 两个任务. 画布 效果: 画布上,选择的方案是:直接以Image作为画布,使用RenderTarget ...
-
使用ECharts制作图形时,如何设置指定图形颜色?
使用ECharts制作图形时,图形颜色是默认的颜色,有时需求需要指定图形颜色,这就需要自己去设置. 在option下的series属性中设置itemStyle,如下所示: itemStyle: { n ...
-
利用CSS制作图形效果
前言 关于如何使用CSS来制作图形,比如说圆形,半圆形,三角形等的相关教程还是挺多的,今天我主要想解释一下里面一些demo的实现原理,话不多说,开始吧 以下所有内容只使用一个HTML元素.任何类型 ...
-
CSS制作图形速查表
很少会有人意识到,当浏览器绘制的border,会有一个角度的问题.我们就是得用这样的一个技巧来制作三角的效果.我们只需要保证一边的边框是有色,其他边框色为透明色,这样我们就很容易制作出三角形,然后改变 ...
-
【转】CSS制作图形速查表-存档
http://www.w3cplus.com/css/css-simple-shapes-cheat-sheet http://www.cnblogs.com/powertoolsteam/p/c ...
随机推荐
-
太牛X了!神奇的故事 你猜得到开头,却猜不到结尾
他在北京发来消息:“我明天去看你,来接我,好么?” 她在南京,开心地回复:“恩啊” 第二天,她在车站搜寻过往人群中他的身影, 期待又焦急“你到底在哪儿?” “傻瓜,你不会真在车站吧,今天是愚人节哎,哈 ...
-
BZOJ1766 : [Ceoi2009]photo
如果两个矩形相交且不是包含关系,那么完全可以让它们不相交. 将坐标离散化后,设$f[i][j][k]$表示区间$[i,j]$纵坐标不小于$k$的部分的最优解. 对于$f[i][j][k]$,要么枚举分 ...
-
Docker4Windows -- 从外部(非本机host)访问 由docker container运行的程序
背景 当我们在windows 上面运行docker container的时候,我们需要借助于模拟器(例如,Virtual box/Hyper V),她的目的主要是在我们的windows系统上面模拟出一 ...
-
hibernate 映射组成关系
建立域模型和关系数据模型有着不同的出发点: 域模型: 由程序代码组成, 通过细化持久化类的的粒度可提高代码的可重用性, 简化编程 在没有数据冗余的情况下, 应该尽可能降低表的数目, 简化表之间的參照关 ...
-
MT6575 充电流程
1,目前充电主要包括Power Off Charging(关机充电) .IPO Charging(休眠充电)和 OS Charging(开机充电) 三个部分 2,Power Off Charging ...
-
HihoCoder1338 A Game (区间DP)
<题目链接> 题目大意: 两个人轮流从一个序列中取数,他们都面临同样的二选一决策:是拿走最左边的数,还是拿走最右边的数?问先手最多能够得到的分数是多少. 解题分析: 一道比较经典的DP,因 ...
-
JavaScript中Function的拓展
Function 是什么东西,就是JavaScript中的*类,系统级别的类.我们平时写的函数方法例如下. function Animal() { } Animal就是Function的实例,但是在 ...
-
kubernetes添加删除重启节点
1.添加节点 (master)查看目前节点 [root@k8s-master ~]# kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-maste ...
-
开源知识库管理系统选型 centos6.4 搭建knowlededgeroot-1.0.4知识库平台
开源知识库管理系统选型,除了使用wiki外,还有下面可选: http://www.knowledgebase-script.com/ https://github.com/lordlamer/know ...
-
css学习之overlay
CSS Overlay技巧 作者:大漠 日期:2013-11-10 点击:8 本文由大漠根据SARA SOUEIDAN的<CSS OVERLAY TECHNIQUES>所译,整个译文带 ...