使用 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.

我删除了添加 colorgroupattrid 到有问题的 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;