2017-08-02 65 views
1

我想要一个多面barplot。表示总值的小节必须是红色的,其他的则是蓝色的。
总值由Desc1 =“ - ”表示。 我有以下代码:方面barplot不尊重colorvalues

#df contains the following data:                           
#Year;Maingroup;Desc1 ;Desc2  ;Value 
#2017;A    ;1  ;A1    ;10 
#2017;A    ;2  ;A2    ;20 
#2017;A    ;-  ;AT    ;30 
#2017;B    ;10  ;B10   ;100 
#2017;B    ;20  ;B20   ;200 
#2017;B    ;-  ;BT    ;300                          
#2017;C    ;11  ;C100   ;53 
#2017;C    ;22  ;C200   ;54 
#2017;C    ;-  ;CT    ;107 

#add a new description                             
df <- df %>% unite (Oms,Desc1,Value,sep=' ',remove=FALSE) 
#add color indication 
df <- df %>% mutate(colv=(ifelse(Desc1=="-  ","Red","Blue"))) 
#sort into descending order 
df <- df %>% arrange(desc(Value)) 
#plot horizontal barchart 
ggplot(df, aes(x=Desc2,y=Value))+ 
geom_bar(position=position_dodge(),stat="identity",fill=df$colv)+ 
facet_grid(~Maingroup,scale="free")+ 
coord_flip() 

但R不着色的方法不对的吧。 Wrong bar colors 我在做什么错?

+1

我猜你需要把'补= .. .'在'aes()'内部调用 –

+0

感谢超级响应,试过了,但没有奏效 – Rense

+0

然后,我建议你使用'dput'发布实际数据的最小示例(处理后),这样我们就可以尝试看看有什么不对 –

回答

0

你必须使用内AES()在开始时填充= COLV,然后用scale_fill_manual()来定义这样的颜色:

ggplot(df, aes(x=Desc2,y=Value, fill=colv))+ 
geom_bar(position=position_dodge(),stat="identity") + 
scale_fill_manual(values = c("blue", "red")) + 
facet_grid(~Maingroup,scale="free") + 
coord_flip()