4

geom_bar で作成された ggplot の凡例とプロットの両方でグループを並べ替えたいと思います。

ここに例があります

mydata <- data.frame(mygroup = c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), 
                     mysubgroup = c("north", "west", "south", "east", "north", "west", "south", "east"), 
                     value = c(5,10,6,12, 4, 4, 3, 5))

私の出発点:

myplot <- ggplot(mydata, aes(mygroup, value, fill = mysubgroup)) + 
            geom_bar(position = "dodge", width = 0.5, stat = "identity")
myplot

ここに画像の説明を入力

凡例とバーの両方を「北」、「南」、「東」、「西」の順にプロットしたいと思います。

scale_fill_discrete(limits = c("north", "south", "east", "west"))プロットに追加してみました。凡例は目的の順序で配置されますが、バーは配置されません (バーは再配置されます)。

myplot + scale_fill_discrete(limits = c("north", "south", "east", "west"))

データを並べ替えても、上記と同じ結果が得られます。

mydata2 <- mydata[c(1,3,4,2,5,7,8,6),]
myplot2 <- ggplot(mydata2, aes(mygroup, value, fill = mysubgroup)) + 
               geom_bar(position = "dodge", width = 0.5, stat = "identity") 
myplot2 + scale_fill_discrete(limits = c("north", "south", "east", "west"))

ここに画像の説明を入力

4

1 に答える 1

4

質問を書いているときに答えを見つけました(そして、貢献を招待するためにCWとして投稿します)...

答えは、サブグループを望ましい順序のレベルを持つ「因子」にすることです。

mydata <- data.frame(mygroup = c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), 
                     mysubgroup = factor(c("north", "west", "south", "east", 
                                           "north", "west", "south", "east"), 
                                          levels = c("north", "south", "east", "west")), 
                     value = c(5,10,6,12, 4, 4, 3, 5))

ggplot(mydata, aes(mygroup, value, fill = mysubgroup)) + 
            geom_bar(position = "dodge", width = 0.5, stat = "identity")
于 2013-05-13T17:48:51.217 に答える