You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SAS分段条形图中textattributes(textattrs)不生效问题咨询

SAS堆叠条形图分段标签颜色不生效问题解决

在使用PROC Template创建堆叠(分段)条形图时,通过discreteattrmap为Asia、USA、Europe三个分组分别设置了fillattrs(填充颜色)和textattrs(文本颜色),但图表中分段内的数字标签始终显示为黑色,未应用指定的文本颜色。

原代码如下:

proc template;
  define statgraph barchart;
    begingraph ;
      discreteattrmap name="farger";
       value "Asia"   / fillattrs=(color=darkgreen) textattrs=(color=white);
       value "USA" / fillattrs=(color=white) textattrs=(color=green);
       value "Europe" / fillattrs=(color=red) textattrs=(color=blue);
     enddiscreteattrmap;
     discreteattrvar attrvar=origin var=origin attrmap="farger";

     entrytitle "Freq of Total Models by Type and Origin";

     layout overlay;
        barchart x=type / name="carmodels"
          stat=freq display=all
          group=origin
          barlabel=true
          groupdisplay=Stack 
          segmentlabel=true; 
        discretelegend "carmodels";
      endlayout;
    endgraph;
  end;
run;
%stpbegin;
proc sgrender data=SASHELP.cars template=barchart;
run;

解决方法

问题根源在于segmentlabel默认不会自动继承discreteattrmap中的textattrs配置,需要在barchart语句中显式指定分段标签的属性关联到attrvar的文本样式。

修改barchart语句,添加segmentlabelattrs=attrvar(origin)参数,让分段标签颜色与分组的textattrs绑定:

修改后的完整代码:

proc template;
  define statgraph barchart;
    begingraph ;
      discreteattrmap name="farger";
       value "Asia"   / fillattrs=(color=darkgreen) textattrs=(color=white);
       value "USA" / fillattrs=(color=white) textattrs=(color=green);
       value "Europe" / fillattrs=(color=red) textattrs=(color=blue);
     enddiscreteattrmap;
     discreteattrvar attrvar=origin var=origin attrmap="farger";

     entrytitle "Freq of Total Models by Type and Origin";

     layout overlay;
        barchart x=type / name="carmodels"
          stat=freq display=all
          group=origin
          barlabel=true
          groupdisplay=Stack 
          segmentlabel=true
          segmentlabelattrs=attrvar(origin); /* 添加此行,关联文本属性 */
        discretelegend "carmodels";
      endlayout;
    endgraph;
  end;
run;
%stpbegin;
proc sgrender data=SASHELP.cars template=barchart;
run;

添加segmentlabelattrs=attrvar(origin)后,分段标签会自动读取discreteattrmap中对应分组的textattrs颜色设置,实现标签颜色与分组的预期绑定。

内容的提问来源于stack exchange,提问作者Anders Klockar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:57:16