使用 sgplot - 森林图更改特定观察颜色(值文本)
Changing specific observation color (value text) with sgplot - forest plot
我目前正在为森林图(SAS 大学版)编写 sgplot 代码。我已经设法得到了我想要的正确图表,但是我无法更改特定观察的颜色。这是我的代码
data my_data;
input study $ year rr lcl ucl;
datalines;
mickey 2015 1.5 0.7 2.3
minny 2010 1.2 1.0 1.4
donald 2013 0.8 0.2 1.4
daisy 2014 1.3 1.0 1.6
goofy 2017 1.9 0.9 2.9
pluto 2010 1.4 0.7 2.1
;
run;
proc sgplot data=my_data
noautolegend nocycleattrs;
scatter y=study x=rr/ markerattrs=(symbol=squarefilled size=12 color=black);
highlow high=ucl low=lcl y=study / type=line lineattrs=(color=black);
yaxistable study year / labelattrs=(family=arial size=12pt weight=bold) position=left location=inside valueattrs=(family=arial size=10pt);
yaxistable rr lcl ucl / labelattrs=(family=arial size=12pt weight=bold) position=right location=inside valueattrs=(family=arial size=10pt);
xaxis offsetmin=0.1 offsetmax=1 min=0.5 max=3.0 display=(nolabel);
yaxis offsetmin=0.1 offsetmax=0.1 display=none reverse;
refline 1 / axis=x;
styleattrs axisextent=data;
run;
我想要实现的是将观察值 3 (donald, 2013, 0.8 0.2 1.4) 更改为红色(绘图时的文本,不仅是标记属性)。
我曾尝试检查不同的 sgplot 属性,但我无法在绘图时更改观测值 3 的特定颜色(红色,其他观测值保持黑色)。我也看过模板,但这没有帮助。我怎样才能做到这一点?
假设决策背后有一些编程逻辑,一种方法是创建一个虚拟组变量。这里我假设逻辑是 rr < 1.0
.
我删除了添加 colorgroup
和 attrid
到有问题的 yaxistable。您可以很容易地更改分配给组的颜色(为大多数恢复黑色),方法是使用我在下面所做的属性图(最正确)或其他一些选项,包括编辑默认图形颜色。
data my_data;
length groupvar ;
input study $ year rr lcl ucl;
if rr < 1.0 then groupvar='redgroup';
else groupvar='blackgroup';
datalines;
mickey 2015 1.5 0.7 2.3
minny 2010 1.2 1.0 1.4
donald 2013 0.8 0.2 1.4
daisy 2014 1.3 1.0 1.6
goofy 2017 1.9 0.9 2.9
pluto 2010 1.4 0.7 2.1
;
run;
data attrmap;
length value ;
input value $ textcolor $;
retain id 'colorgroup';
datalines;
redgroup red
blackgroup black
;;;;
run;
proc sgplot data=my_data
noautolegend nocycleattrs dattrmap=attrmap;
scatter y=study x=rr/ markerattrs=(symbol=squarefilled size=12 color=black) group=groupvar attrid=colorgroup;
highlow high=ucl low=lcl y=study / type=line lineattrs=(color=black);
yaxistable study year / labelattrs=(family=arial size=12pt weight=bold) position=left location=inside valueattrs=(family=arial size=10pt)
attrid=colorgroup colorgroup=groupvar;
yaxistable rr lcl ucl / labelattrs=(family=arial size=12pt weight=bold) position=right location=inside valueattrs=(family=arial size=10pt) ;
xaxis offsetmin=0.1 offsetmax=1 min=0.5 max=3.0 display=(nolabel);
yaxis offsetmin=0.1 offsetmax=0.1 display=none reverse;
refline 1 / axis=x;
styleattrs axisextent=data;
run;
我目前正在为森林图(SAS 大学版)编写 sgplot 代码。我已经设法得到了我想要的正确图表,但是我无法更改特定观察的颜色。这是我的代码
data my_data;
input study $ year rr lcl ucl;
datalines;
mickey 2015 1.5 0.7 2.3
minny 2010 1.2 1.0 1.4
donald 2013 0.8 0.2 1.4
daisy 2014 1.3 1.0 1.6
goofy 2017 1.9 0.9 2.9
pluto 2010 1.4 0.7 2.1
;
run;
proc sgplot data=my_data
noautolegend nocycleattrs;
scatter y=study x=rr/ markerattrs=(symbol=squarefilled size=12 color=black);
highlow high=ucl low=lcl y=study / type=line lineattrs=(color=black);
yaxistable study year / labelattrs=(family=arial size=12pt weight=bold) position=left location=inside valueattrs=(family=arial size=10pt);
yaxistable rr lcl ucl / labelattrs=(family=arial size=12pt weight=bold) position=right location=inside valueattrs=(family=arial size=10pt);
xaxis offsetmin=0.1 offsetmax=1 min=0.5 max=3.0 display=(nolabel);
yaxis offsetmin=0.1 offsetmax=0.1 display=none reverse;
refline 1 / axis=x;
styleattrs axisextent=data;
run;
我想要实现的是将观察值 3 (donald, 2013, 0.8 0.2 1.4) 更改为红色(绘图时的文本,不仅是标记属性)。
我曾尝试检查不同的 sgplot 属性,但我无法在绘图时更改观测值 3 的特定颜色(红色,其他观测值保持黑色)。我也看过模板,但这没有帮助。我怎样才能做到这一点?
假设决策背后有一些编程逻辑,一种方法是创建一个虚拟组变量。这里我假设逻辑是 rr < 1.0
.
我删除了添加 colorgroup
和 attrid
到有问题的 yaxistable。您可以很容易地更改分配给组的颜色(为大多数恢复黑色),方法是使用我在下面所做的属性图(最正确)或其他一些选项,包括编辑默认图形颜色。
data my_data;
length groupvar ;
input study $ year rr lcl ucl;
if rr < 1.0 then groupvar='redgroup';
else groupvar='blackgroup';
datalines;
mickey 2015 1.5 0.7 2.3
minny 2010 1.2 1.0 1.4
donald 2013 0.8 0.2 1.4
daisy 2014 1.3 1.0 1.6
goofy 2017 1.9 0.9 2.9
pluto 2010 1.4 0.7 2.1
;
run;
data attrmap;
length value ;
input value $ textcolor $;
retain id 'colorgroup';
datalines;
redgroup red
blackgroup black
;;;;
run;
proc sgplot data=my_data
noautolegend nocycleattrs dattrmap=attrmap;
scatter y=study x=rr/ markerattrs=(symbol=squarefilled size=12 color=black) group=groupvar attrid=colorgroup;
highlow high=ucl low=lcl y=study / type=line lineattrs=(color=black);
yaxistable study year / labelattrs=(family=arial size=12pt weight=bold) position=left location=inside valueattrs=(family=arial size=10pt)
attrid=colorgroup colorgroup=groupvar;
yaxistable rr lcl ucl / labelattrs=(family=arial size=12pt weight=bold) position=right location=inside valueattrs=(family=arial size=10pt) ;
xaxis offsetmin=0.1 offsetmax=1 min=0.5 max=3.0 display=(nolabel);
yaxis offsetmin=0.1 offsetmax=0.1 display=none reverse;
refline 1 / axis=x;
styleattrs axisextent=data;
run;