忽略因子顺序的ggplot背靠背条形图

时间:2015-12-23 22:34:51

标签: r ggplot2

我正在尝试创建背靠背的条形图,而不是

Creating a stacked bar chart centered on zero using ggplot

然而,即使我已将fill变量指定为有序因子,我的条形中填充水平的顺序似乎也会被忽略?

MWE

# Illustrate problem with factors being ignored

mydata <- read.csv(textConnection(
"Attribute, Score, Percent
A1, Poor, 10
A1, Below Avg, 20
A1, Above Avg, 20
A1, Excellent, 50
A2, Poor, 20
A2, Below Avg, 20
A2, Above Avg, 20
A2, Excellent, 40"), as.is=TRUE, strip.white=TRUE, header=TRUE)
mydata$Score <- factor(mydata$Score, 
  levels=c('Poor','Below Avg','Above Avg','Excellent'), order=TRUE)
str(mydata)


myplot <- ggplot(data=mydata, aes(x=Attribute))+
  geom_bar(data=subset(mydata, 
       as.character(mydata$Score) %in% c("Poor","Below Avg")), 
       aes(y= -Percent, fill=Score), stat='identity')+
  geom_bar(data=subset(mydata, 
       !as.character(mydata$Score) %in% c("Poor","Below Avg")),  
       aes(y=  Percent, fill=Score), stat='identity')+
geom_hline( yintercept=0, size=2, color="red")+
coord_flip()

myplot

给出

请注意,填充级别按字母顺序排序,而不是根据排序因子排序。

由于 卡尔施瓦茨

1 个答案:

答案 0 :(得分:1)

这是一个具有挑战性的问题。我已经找到了解决办法,但事实是我不明白为什么理由可以解决这个问题。

mydata <- mydata[c(2,1,3,4,6,5,7,8), ]

起初我认为问题出在转换因素中,但是你输入的代码效果很好。

改变图例的顺序似乎是个好主意。

myplot + scale_fill_discrete(limits=c("Excellent", "Above Avg", "Below Avg","Poor"))