このようなggplotを使用して積み上げ棒グラフを作成しています。
_plot_df <- df[!is.na(df$levels), ]
ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")
_
これは私に次のようなものを与えます:
レベル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")
_
スタッキングバーの_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")
_
これは元のプロットです:
_ggplot(plot_df, aes(group, fill = levels)) +
geom_bar(position = "fill")
_
または、 alistaireのコメント で提案されているposition_fill(reverse = TRUE)
を使用します。
_ggplot(plot_df, aes(group, fill = levels)) +
geom_bar(position = position_fill(reverse = TRUE))
_
凡例のレベル(色)は積み上げバーと同じ順序ではないことに注意してください。