在两个不同的值之间添加refline到SAS sgplot

时间:2016-01-07 10:49:35

标签: plot sas

我有一个sgplot,它绘制了2个系列,我需要用多行来注释。我理解如何添加标准reflines(见下文),但

我的问题是,我无法解决如何在两个不同点之间添加转换。即,在y轴值0和-50之间的x轴值为50的垂直虚线。我需要设置每一行的开始和结束,而不仅仅是它开始的轴上的点。

proc sgplot data = all_sd_dplot noautolegend ;
by variablecode ;
where variablecode='V01'
and comparisonstudyid in (29318 29322);
series x=bin y= sigmavalue  / group=legendname name="series";
series x=bin y= fit  / group=legendname name="series" LINEATTRS= (color = black thickness=2);
yaxis values=(-160 to 20 by 20) label = "Accumulated minutes over baseline";
xaxis  values = (0 12 24 36 48 60) label = "Hours";
REFLINE 0 / AXIS= Y TRANSPARENCY = 0.2 LINEATTRS= (COLOR=black pattern=dot thickness=2); *baseline;
REFLINE 4 / AXIS= X TRANSPARENCY = 0.5 LINEATTRS= (COLOR=red); *end of SD;
REFLINE 0 / AXIS= X TRANSPARENCY = 0.5 LINEATTRS= (COLOR=blue); *start of SD;
REFLINE -135 / AXIS= Y TRANSPARENCY = 0.2 LINEATTRS= (COLOR=black pattern=dot thickness=2); *Y0;
run;

任何帮助都将非常感谢!!

3 个答案:

答案 0 :(得分:1)

我认为没有办法使用refline来做到这一点。我认为您需要在数据集中创建一些假数据,以使您的起点/终点和其余值丢失。然后使用系列画线。我还建议在communities.sas.com上发帖,以便SAS Graph的其中一个人可以提供帮助。

proc sort data=sashelp.class out=class;
by sex;
run;

data class;
set class; 
by sex;
if last.sex then do;
x=13; y=75;output;
x=18; y=75; output;
end;
else output;
run;

proc sgplot data=class;
by sex;
scatter x=age y=weight;
scatter x=age y=height;
series x=x y=y/lineattrs=(color=red thickness=2 pattern=solid);
run;

答案 1 :(得分:1)

以下SAS-UG文件(http://pharmasug.org/download/papers/SA-AD-02.pdf)中的“VECTOR”用法可能有用(参见第3页的示例)。

答案 2 :(得分:0)

这对我来说更容易使用注释,而不是使用SGPLOT函数。你当然可以像Reeza所说的那样,在数据集中将它们作为行添加,但由于某些原因,这可能并不理想;为了这个目的,注释确实存在,并且在我看来它们更加井井有条(尽管有时候它更容易作弊)。

部分使用Reeza的例子,这是我如何做的:

proc sort data=sashelp.class out=class;
  by sex;
run;

data class_annotations;
  x1space='DataValue';
  y1space='DataValue';
  x2space='DataValue';
  y2space='DataValue';
  x1=13;
  y1=80;
  x2=13;
  y2=120;
  function='line';
  output;
  x1=15;
  x2=15;
  output;
run;

proc sgplot data=class sganno=class_annotations;
  by sex;
  scatter x=age y=weight;
  scatter x=age y=height/ y2axis;
run;