1

そのように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」の名前に基づいてアルファベット順に並べられています。レベル「Active aggression」のパーセンテージに基づいて積み上げられたバーを並べ替えたいと思います。

よろしくお願いします

マット

4

1 に答える 1

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)

逆順にしたい場合は、order(temp$x) を order(temp$x,decreasing=TRUE) に変更します。

于 2011-05-17T20:12:21.730 に答える