能否在PROC KDE绘图中指定坐标轴范围?附SGPLOT美化疑问
关于SAS PROC KDE与SGPLOT的两个问题
- 能否直接在PROC KDE过程中指定坐标轴范围,无需后续用SGPLOT二次调整?示例代码如下:
proc kde data=have; bivar y / plots=contour; by z; run;
- PROC KDE生成的等高线图效果出色,但坐标轴刻度不符合需求;若用PROC KDE输出的数据在SGPLOT中绘图,虽能调整坐标轴,但绘图效果远不如PROC KDE生成的图。请问如何让SGPLOT生成的图与PROC KDE的效果一致?
PROC KDE生成的图:
SGPLOT生成的图:
问题1:PROC KDE中直接指定坐标轴范围
PROC KDE本身没有直接设置坐标轴范围的参数,但可通过修改图形模板实现,无需二次调用SGPLOT:
- 先导出PROC KDE对应的双变量等高线绘图模板:
proc template; source Stat.KDensity.Graphics.BiContour; run;
- 复制导出的模板代码,修改
LayoutOverlay部分的xaxisopts和yaxisopts,添加min=和max=参数指定坐标轴范围,示例修改后的模板:
proc template; define statgraph Stat.KDensity.Graphics.BiContour; begingraph; entrytitle "Bivariate Kernel Density Estimate"; layout overlay / xaxisopts=(min=0 max=10 label='X变量') yaxisopts=(min=-5 max=5 label='Y变量') walldisplay=opaque; contourplotparm x=X y=Y z=Density / contourtype=fill colormodel=twocolorramp name='contour' legendlabel='Density'; continuouslegend 'contour' / location=inside position=topright across=1; endlayout; endgraph; end; run;
- 重新调用PROC KDE,生成的图会使用修改后的模板,坐标轴范围已按需求调整。
问题2:用SGPLOT复刻PROC KDE的绘图效果
要让SGPLOT达到PROC KDE的效果,需利用PROC KDE输出的核密度估计数据,并使用匹配的绘图语句:
- 让PROC KDE输出核密度估计的详细数据:
proc kde data=have; bivar x y / out=biv_kd outkernel; /* outkernel输出核密度估计值 */ by z; run;
- 使用SGPLOT的
CONTOURPLOTPARM语句绘制填充等高线,搭配与PROC KDE一致的配色和图层设置:
proc sgplot data=biv_kd; contourplotparm x=x y=y z=density / contourtype=fill colormodel=twocolorramp name='contour' legendlabel='Density'; continuouslegend 'contour' / location=inside position=topright across=1; /* 按需设置坐标轴范围 */ xaxis min=0 max=10; yaxis min=-5 max=5; run;
- 关键细节:
contourtype=fill对应PROC KDE的填充等高线效果,colormodel=twocolorramp匹配PROC KDE默认配色,通过continuouslegend添加密度图例,还原原图的视觉层次。
内容的提问来源于stack exchange,提问作者pakalla
相关产品推荐
相关产品推荐

