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
相关产品推荐
相关产品推荐

