2017-10-11 7 views
0

ドッジ付きバーを持つ単純な水平バープロットを作成したいと思いますが、私は(水平)バーの順序を苦労しています。通常のバープロット(スタックまたはドッジド)を行うと、有用な因子レベルを設定し、対応する変数に従ってデータフレームを順序付けることで、バーの順序を簡単に制御できます。しかし、データフレームの順序付けは、水平プロットのバーの順番には何の影響も与えないようです。 私はいくつか同様の質問を見つけましたが、私の問題に対応しているかどうかはわかりません(プロットは少し違って見えます)。R ggplot水平ドッブ付きバープロット注文

df1 <- data.frame (year = as.factor(c(rep(2015,3),rep(2016,3),rep(2017,3))), 
value = c(50,30,20,60,70,40,20,50,80), 
set = rep(c("A","B","C"),3)) 

ggplot() + geom_bar(data= df1, aes(y=value, x=set, fill=year), 
stat="identity", position="dodge") + 
coord_flip() 

私がしたいのは、上の2015バーと下の2017バーを示す水平プロットです。興味深いことに、coord_flip()を省略すると、バーはそのように並べられますが、水平になるようにプロットする必要があります。 プロットに変更されないデータをこのように注文:私は任意のヒント:)

答えて

2

あなたがggplot2の特質の一つにヒットしてきたがために感謝しています

df1 <- df1[rev(order(df1$year)),] 

を - coord_flip後のバーの順序を取得しますほとんど直感的ではない。それを変更するには、値そのものだけでなく、因子レベルの順序をdf1$yearに逆順にする必要があります。以下を参照してください:

library(ggplot2) 

df1 <- data.frame (year = as.factor(c(rep(2015,3),rep(2016,3),rep(2017,3))), 
        value = c(50,30,20,60,70,40,20,50,80), 
        set = rep(c("A","B","C"),3)) 

levels(df1$year) 
#> [1] "2015" "2016" "2017" 

df1$year <- factor(df1$year, levels = rev(levels(df1$year))) 

ggplot(df1) + 
    geom_bar(aes(y=value, x=set, fill=year), 
      stat="identity", position="dodge") + 
    coord_flip() 

あなたが元の順序であなたの伝説を残しておきたい場合は、あなたがguide_legendでこれにアクセスすることができます。

ggplot(df1) + 
    geom_bar(aes(y=value, x=set, fill=year), 
      stat="identity", position="dodge") + 
    guides(fill = guide_legend(reverse = TRUE)) + 
    coord_flip() 

+0

パーフェクト、そんなにありがとう!私は因子レベルを変えようとしましたが、ガイド(fill = guide_legend(逆= TRUE))は本当にトリックでした。私は前に似たような問題を抱えていましたが、伝説の順序を変えるこの素敵な行を完全に忘れていました:) – Aki

関連する問題