web-dev-qa-db-ja.com

Rのcoord_flipの後の逆の順序

Dbvからのデータ例:

_  gender Sektion
1      m       5
2      m       5
3      w      3B
4      w      3B
5      w      3B
6      m       4
_

私は次のプロットを持っています:

_Sekplot <- ggplot(dbv,aes(x=Sektion,
                          fill=factor(gender),
                          stat="bin", 
                          label = paste(round((..count..)/sum(..count..)*100), "%"))) 
Sekplot <- Sekplot + geom_bar(position="fill")
Sekplot <- Sekplot + scale_y_continuous(labels = percent)
Sekplot <- Sekplot + labs(title = "test")
Sekplot <- Sekplot + scale_fill_discrete(name="test", breaks=c("m", "w", "k.A."), labels=c("m", "w", "k.A."))
Sekplot <- Sekplot + geom_hline(aes(yintercept = ges, linetype = "test"), colour = "black", size = 0.75, show_guide = T)
Sekplot <- last_plot() + coord_flip()
Sekplot <- Sekplot + guides(colour = guide_legend(override.aes = list(linetype = 0 )), 
                                    fill = guide_legend(override.aes = list(linetype = 0 )), 
                                    shape = guide_legend(override.aes = list(linetype = 0 )), 
                                    linetype = guide_legend()) + theme(legend.title=element_blank())

Sekplot 
_

出力:y軸を間違った順序でプロット

Plot with y-axis in wrong order

「選択」軸の順序を逆にするにはどうすればよいですか?一番上に1つ、一番下に8つが欲しいです。

groupA$Date <- factor(groupA$Date, levels=rev(unique(groupA$Date)))に従って試してみました:

_Sekplot <- last_plot() + coord_flip() + scale_x_reverse()
_

いくつかの風味がありますが、正しい方法を見つけることができませんでした。

21
CH_

これを行うには、limits引数で_scale_x_discrete_を追加できます。制限を必要な順序で単純に書き出すこともできますが、多くの因子レベルがある場合は複雑になります。代わりに、データセットから因子のレベルを引き出し、revを利用して逆の順序に並べることができます。

次のようになります:scale_x_discrete(limits = rev(levels(dbv$Sektion)))

28
aosmith