web-dev-qa-db-ja.com

積み上げ棒の逆順

このようなggplotを使用して積み上げ棒グラフを作成しています。

_plot_df <- df[!is.na(df$levels), ] 
ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")
_

これは私に次のようなものを与えます:

enter image description here

レベル1が一番下に、レベル5が各バーの一番上になるように、積み重ねられたバー自体の順序を逆にするにはどうすればよいですか?

私はこれについて多くの質問を見てきました(たとえば、 ggplot2のアイデンティティを使用して積み上げ棒グラフの順序を制御する方法 )、一般的な解決策は、そのレベルでデータフレームをそのgggplotとして並べ替えることですを使用して決定します

だから私はdplyrを使用して並べ替えを試みました:

plot_df <- df[!is.na(df$levels), ] %>% arrange(desc(levels))

ただし、プロットは同じです。また、昇順または降順のどちらで配置しても違いはありません

再現可能な例を次に示します。

_group <- c(1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4, 1,2,3,4)
levels <- c("1","1","1","1","2","2","2","2","3","3","3","3","4","4","4","4","5","5","5","5","1","1","1","1")
plot_df <- data.frame(group, levels)

ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")
_
24
Simon

スタッキングバーの_ggplot2_バージョン2.2.0のリリースノート推奨

逆の順序でスタックする場合は、forcats::fct_rev()を試してください

_library(ggplot2)   # version 2.2.1 used    
plot_df <- data.frame(group = rep(1:4, 6),
                      levels = factor(c(rep(1:5, each = 4), rep(1, 4))))
ggplot(plot_df, aes(group, fill = forcats::fct_rev(levels))) + 
  geom_bar(position = "fill")
_

Reverse levels

これは元のプロットです

_ggplot(plot_df, aes(group, fill = levels)) + 
  geom_bar(position = "fill")
_

Original plot

または、 alistaireのコメント で提案されているposition_fill(reverse = TRUE)を使用します。

_ggplot(plot_df, aes(group, fill = levels)) + 
  geom_bar(position = position_fill(reverse = TRUE))
_

enter image description here

凡例のレベル(色)は積み上げバーと同じ順序ではないことに注意してください。

46
Uwe