2011-05-12 69 views
1

我已经在ggplot中创建了堆积条图。ggplot:基于条内水平的百分比改变堆积条的顺序

antr1$Traits4<-factor(antr1$Traits4, 
         levels=c("Flight", "Avoidance", "Investigative", 
           "Defensive aggression","Active aggression")) 

ggplot(antr1, aes(Receiver3, fill=Traits4)) + 
    geom_bar(position="fill") + 
    coord_flip() + 
    scale_y_continuous("", formatter="percent") + 
    scale_fill_manual(values=c("Flight"="yellow", 
          "Avoidance"="green", 
          "Investigative"="blue", 
          "Defensive aggression"="orange", 
          "Active aggression"="red")) 

它很好地工作。然而,目前酒吧是根据“Receiver3”的名称按字母顺序排列的。我想根据“主动攻击”级别的百分比重新排序堆积的条。

,请多关照

马特

回答

3

如果你知道Receiver3水平的顺序,你想,你可以指定是通过这样的:

antr1$Receiver3 <- factor(antr1$Receiver3, 
        levels=c(...list the levels in the order you'd like...), 
        ordered=TRUE) 

如果Receiver3有很多层次,所以手动确定正确的顺序是禁止的,你可以尝试这样的事情:

temp <- aggregate(antr1$Traits4,by=list(receiver=antr1$Receiver3), 
      FUN=function(xx){ 
       return(sum(xx=='Active aggression')/length(xx)) 
      } 
antr1$Receiver3 <- factor(antr1$Receiver3,levels=temp$receiver[order(temp$x)], 
        ordered=TRUE) 

如果您想订购相反订单,请更改订单(温度$ x)以订购(温度$ x,减少= TRUE)。