菱花荇蔓随双桨:百变绘图
ODS Graphics System
- ODS Graphics System的语法简介统一,易于学习
- ODS Graphics System已包含在BASE模块中,不像GRAPH还要单独购买
ODS Graphics System的五大部件:
- ODS Graphics 语句
- 通过ON或OFF开关启用ODS Graphics
- 通过统计过程选项PLOTS选项创建ODS Graphics
- 通过BRODER、WIDTH、HEIGHT、OUTPUTFMT、IMAGENAME等控制边框、宽、高、输出格式、以及图片名称。
|
|
- ODS Graphics设计器:通过图形化交互式界面创建、设计个性化的ODS Graphics,并自动生成GTL
- 运行SAS自带的宏程序%sddesign来启动
- 菜单->工具->SAS ODS Graphics设计器启动
- ODS Graphics编辑器:通过图形化的交互式界面修改ODS Graphics的元素
|
|
- ODS Graphics 过程:通过简单、简洁的语法创建各式各样的统计图形,包括5个过程:
- SGPLOT:创建多种多样的单个图(单格图)
- SGPANEL:创建面板图(多格图)
- SGSCATTER:创建矩阵散点图
- SGDESIGN:基于SAS ODS Graphics 设计器文件创建图形
- SGRENDER:基于图形模版语言(GTL)和SGE文件创建图形
|
|
SAS GTL:图形模版语言,一种创建复杂的、个性化图形的绘图语言。具体使用时先通过TEMPLATE过程定义,再通过SGRENDER加载渲染。
- 定义,在PROC TEMPLATE过程中用DEFINE STARTGRAPH语句块定义绘图模版。
proc template;
define statgraph template-name;
begin graph / <options>;
<gtl statements to define the graph>
endgraph;
end;
run;
- 渲染,用PROC SGRENDER关联绘图数据与绘图模版,渲染生成图形。
proc serenader data=data-set-name
template=template-name;
run;
|
|
设计原则
- Less is more
- 点:让每一个点清晰可见。
- 线:不同组的线条应该用不同颜色或不同样式区分,可依据需要添加趋势线和参考线。
- 条:一般不给条加边框,不建议条之间重叠,条与条之间间隔比例为1:1.5~1:0.5为宜;建议颜色填充而非样式,可用颜色强度代表重要程度;如果希望显示排名顺序或分类标签太长、分类太多,建议用横向条图。
- 刻度线:刻度尺过于离散,建议用Log转换,一般情况下,纵坐标刻度要从零开始
- 图例:确实需要说明时才增加图例;为不使图例喧宾夺主,一般不加边框;图例一般置于图右侧,若图较宽、图例文字较长时,图例横向置于图内的上/下方。
- 其他:不建议用饼图、不建议用3D图
条图系列
单式条图
要分析的变量就一个分类变量时,此时适用单式条图或百分比条图。
- HBAR:横向条图
- VBAR:纵向条图
- CATEGORYORDER=:排序方式
|
|
频数图
使PROC FREQ里TABLE语句的选项PLOTS=FREQPLOTS,此选项会自动调用ODS Graphics System绘制频数图。
|
|
带误差限的单式条图
- RESPONSE:指定连续变量
- STAT=:指定统计指标
- LIMITSTAT=:stddev, stderr, clm 指定限制线统计量
- LIMITS=:upper, lower, both 指定限制线展示形式
|
|
单式百分比条图
单式百分比条图在绘制时需要先增加辅助分组变量,而后通过PROC SGPLOT的HBAR或VBAR实现。
- GROUP=:指定分组变量
- GROUPDISPLAY=:指定为堆叠方式显示
- STAT=PERCENT:指定统计指标为百分比
|
|
簇拥式复式条图
单式百分比条图就是复式条图的一种特例。
- GROUP=:指定分组变量
- GROUPDISPLAY=:控制分组显示方式,簇拥式(cluster),堆叠式(stack)
|
|
簇拥式复式误差限条图
- RESPONSE:指定连续变量
- STAT=:指定统计指标
- LIMITSTAT=:stddev, stderr, clm 指定限制线统计量
- LIMITS=:upper, lower, both 指定限制线展示形式
- GROUP=:指定分组变量
|
|
复式百分比条图
- PCTLEVEL=GROUP:控制百分比为分组的百分比
|
|
马赛克图
使PROC FREQ里TABLE语句的选项PLOTS=MAOSAICPLOT,此选项会自动调用ODS Graphics System绘马赛克图。
|
|
镜面式复式条图
|
|
面板条图
通过PROC SGPANEL实现面板条图,用PANELBY语句指定面板分量。
|
|
直方图系列
简单直方图
- NBINS:直方的数量
- BINWIDTH:直方的宽度
|
|
重叠直方图
- 可以用GROUP设置分组变量,也可以用多个HISTOGRAM语句叠加
- 使用TRANSPARENCY设置透明度
|
|
镜面直方图
无法通过 SGPLOT直接实现,需要借助GTL语言。
|
|
面板直方图
通过PROC SGPANEL和HISTOGRAM语句来实现
|
|
箱型图系列
箱线图提供了更为明确的统计量信息,如均数,P25,P50以及P75。箱线图可以通过PROC SGPLOT的VBOX或HBOX实现。
简单箱型图
|
|
分组箱型图
分组箱形图的绘制只需在VBOX或HBOX语句中增加用GROUP分组变量即可。
|
|
面板箱型图
面板箱型图可通过PROC SGPANEL过程实现。
|
|
散点图系列
X-Y散点图
X-Y散点图可通过PROC SGPLOT的SCATTER语句实现。
|
|
X-Y散点回归图
- 使用REG语句增加回归线
|
|
分组散点图
- 使用GROUP选项增绘制分组散点图
|
|
面板散点图
在PROC SGPANEL中用PANELBY语句指定分面变量,而后用SCATTER语句绘制散点图。
|
|
泡泡图
增加一个变量控制散点图中点的大小,通过PROC SGPLOT中的BUBBLE实现。
|
|
矩阵散点图
探查多个变量之间两两的关系。通过PROC SGSCATTER实现。
|
|
折线图系列
简单折线图
若X与Y一一对应,可以用SERIES语句绘制。
|
|
若X与Y不是一一对应,可以用VLINE或HLINE语句绘制。
|
|
误差折线图
使用LIMITS和LIMITSTAT。
|
|
分组误差折线图
用GROUP选项指定分组变量。
|
|
面板误差折线图
PROC SGPANEL过程中使用PANELBY语句。
|
|
面积图系列
面积图
通过PROC SGPLOT的BAND语句实现。
|
|
带状图
通过PROC SGPLOT的BAND语句实现。
|
|
拟合图系列
密度曲线
可以用PROC UNIVARIATE过程中的HISTOGRAM语句,也可以用PROCSGPLOT的DENSITY语句。
|
|
回归线
可以用PROC REG过程中的PLOTS选项,也可以用PROC SGPLOT的REG语句。
|
|
椭圆曲线
通过PROC SGPLOT的ELLIPSE语句实现。
|
|
ROC曲线
通过PROC LOGISTIC回归的PLOTS选项实现。
|
|
Kaplan-Meier曲线
通过PROC LIFETEST的PLOTS选项实现。
|
|
|
|
LOESS曲线
局部加权回归散点发(Locally Weighted Scattered Plot Smoothing, LOESS)
- PROC LOESS过程的PLOTS语句,AICC选项指定平滑程度
- PROC SGPLOT过程的LOESS语句,SMOOTH选项指定平滑程度
|
|
Spline曲线
SAS中最容易实现的样条函数是Penalized B-Spline Curve,可通过PROC SGPLOT里的PBSPLINE语句绘制。
|
|
森林图系列
通过PROC SGPLOT的SCATTER语句及其XERRORUPPER和XERRORLOWER选项绘制,或通过highlow语句绘制。
简单森林图
- 用HIGHLOW语句绘制效应值机器95%CI
- 文字部分借助9.4的新语句YAXISTABLE直接插入文字变量
|
|
亚组分析森林图
SAS 9.40M3的STYLEATTRS语句新增了AXISEXTENT选项,YAXISTABLE语句增加了INDENTWEIGHT和PAD选项,可以单凭SGPLOT完美实现亚组分析森林图。
|
|
地图系列
纯地图
- MAP:指定地图数据集
- DATA:指定反应数据集,即使不在地图上绘制反应变量,仍需指定反应数据集(反应数据集可以和地图数据集是一个数据集)
- 添加各州名称标注:用USattr这个属性数据集,并利用SAS自带的宏给地图增加标签说明文字,生成标注数据集,然后绘制地图时用ANNO选项指定标注数据集。
|
|
统计地图
BLOCK
|
|
热力地图
CHORO
|
|
PROC SGPLOT总结
PROC SGPLOT <*option(s)>;
STYLEATTRS </*option(s)>;
PLOT STATEMENT </*option(s)>;
XAXIS <*option(s)>;
X2AXIS <*option(s)>;
YAXIS <*option(s)>;
Y2AXIS <*option(s)>;
KEYLEGEND <“name-1” … “name-n”> </*option(s)>;
GRADLEGEND <“name”> </*option(s)>;
RUN;
SGPLOT and SGPANEL plot statements and selected options
syntax | selected options | ||
---|---|---|---|
SCATTER | scatter x=var y=var / options; | datalabel=var | Displays a label for each data point |
SERIES | series x=var y=var / options; | break | Creates a break in the line for each missing value |
curvelabel | Labels the series curve using the Y variable label | ||
STEP | step x=var y=var / options; | break | Creates a break in the line for each missing value |
curvelabel | Labels the series curve using the Y variable label | ||
NEEDLE | needle x=var y=var / options; | baseline=val | specifies a numeric value on the Y axis for the baseline |
VECTOR | vector x=var y=var / options; | xorigin=val | specifies Xcoordinate for origin either numeric value or numeric variable |
yorigin=val | specifies Ycoordinate for origin either numeric value or numeric variable | ||
BUBBLE | bubble x=var y=var size=var / options; | fill | specifies fill is visible |
nofill | specifies fill is not visible | ||
outline | specifies outline is visible | ||
nooutline | specifies outline is not visible | ||
BAND | band x=var upper=var lower=var / options; | fill | specifies fill is visible |
nofill | specifies fill is not visible | ||
outline | specifies outline is visible | ||
nooutline | specifies outline is not visible | ||
HIGHLOW | highlow x=var high=var lo=var / options; | highcap=val | specifies type of cap to use at end of bar or line |
lowcap=val | specifies type of cap to use at end of bar or line | ||
type=val | specifie how to draw glot with a: BAR or LINE(default) |
图片属性控制
- GPATH:存储位置
- DPI:分辨率
- WIDTH:宽
- HEIGHT:高
- OUTPUTFMT:格式
|
|
输出终端LISTING既支持EPS矢量图,也支持TIF位图。
|
|
PRINTER终端的优势是可以在一个语句里同时设置格式和分辨率,但劣势是绘制的图片仅仅是其输出的一部分区域。
|
|