我正在使用SAS 9.3 如何更改proc sgplot vbar中的条形颜色。
这就是我想要的但我希望s2和s5在情节中有不同的颜色。最好也应该有传说。:
data gr;
input x $ y groupvar $;
datalines;
s1 20 a
s2 20 b
s3 30 a
s4 25 a
s5 45 b
;
run;
proc sgplot data=gr;
vbar x /response=y CATEGORYORDER=RESPDESC ;
run;
这会产生我想要的东西,除非现在我的CATEGORYORDER语句被忽略了:
proc sgplot data=gr;
vbar x /response=y group=groupvar CATEGORYORDER=RESPDESC ;
run;
然后我也尝试了这个,但它没有任何帮助。
proc sort data=gr;
by groupvar;
run;
proc sgplot data=gr;
vbar x /response=y group=groupvar GROUPORDER = DATA;
run;
注释: 我不确定组声明是否可以帮助我,因为它似乎是针对所有组中实际存在所有x轴变量的情况而设计的。例如像这样。
data gr;
input x $ y groupvar $;
datalines;
s1 20 a
s1 20 b
s2 30 a
s2 25 b
s3 10 a
s3 12 b
;
run;
proc sgplot data=gr;
vbar x /response=y group=groupvar GROUPDISPLAY=CLUSTER GROUPORDER = DATA;
run;
答案 0 :(得分:2)
分组变量在这里不起作用,除非你想要所有的a和所有的b在一起。你不能用分组变量解决这个问题。
你有两个大图片选择。一种是使用属性贴图,一种是使用多个高低图来模拟条形图颜色。我认为前者更容易,所以我不会进入后者 - 只要记住其他可能的问题;高低图表在很多方面都是条形图的更灵活版本。
Attribute Maps用于将变量值映射到属性(颜色,模式等)。您设置的数据集包含id
,value
,然后是fillcolor
或linecolor
或其他变量,具体取决于您要更改的内容。
id
是每个单独的属性映射的唯一ID。多个属性映射可以存在于一个数据集中,但每个id
值是一组将立即使用的映射 - 例如,它应基于一个变量。您将根据此值使用属性映射。value
是变量值(因此,s1
s2
等等 - 我认为您不能使用a
和b
真的不想被他们分组)。您将改为按x
分组。fillcolor
应为red
或green
或其他,作为字符变量。这样的事情:
data dattrmap;
set gr;
value=x;
length fillcolor $8;
id='xcolor';
if groupvar='a' then fillcolor='red';
else fillcolor='green';
run;
然后在sgplot中使用它,比如
proc sgplot data=gr dattrmap=dattrmap;
vbar x/response=y group=x attrid=xcolor;
run;
根据有关传说的评论,你必须推出自己的传奇,或者做一些有点hacky的事情,据我所知,让它发挥作用。您可以使用INSET
(这是一个文本框)来改变文本的颜色(不完全确定这是否可行)或者您可以创建一个您不打算实际显示的虚拟图表(也就是说,你将它覆盖为不可见),但它有助于传说。 GTL会做得更好(因为你可以在那里手工编写传说)然后属性图会更乱,所以我不知道哪个更好。
例如,如果你不介意黑客,那就有用。它确实需要VBARPARM而不是VBAR,这对于您呈现的数据来说很好。我们有第二组条形图,故意不显示但会生成图例。
data dattrmap;
set gr;
id='xcolor';
value=x;
length fillcolor $8;
if groupvar='a' then fillcolor='red';
else fillcolor='green';
output;
if _n_=1 then do;
id='acolor';
value='a';
fillcolor='red';
output;
value='b';
fillcolor='green';
output;
end;
run;
proc sgplot data=gr dattrmap=dattrmap noautolegend;
vbarparm category=x response=y/ group=x attrid=xcolor;
vbarparm category=x response=y/ group=groupvar barwidth=0 nooutline attrid=acolor name="forlegend" legendlabel="Groupings";
keylegend "forlegend"/ autoitemsize;
run;