Sim*_*mon 25 r bar-chart ggplot2 stacked-chart dplyr
我正在使用ggplot创建一个堆积条形图,如下所示:
plot_df <- df[!is.na(df$levels), ]
ggplot(plot_df, aes(group)) + geom_bar(aes(fill = levels), position = "fill")
Run Code Online (Sandbox Code Playgroud)
这给了我这样的东西:
如何反转堆叠条本身的顺序,以便第1级位于底部,第5级位于每个条形的顶部?
我已经看到了很多关于这方面的问题(例如,如何使用ggplot2上的标识来控制堆积条形图的排序),并且常见的解决方案似乎是按照该级别对数据帧重新排序,因为ggplot正在使用确定顺序
所以我尝试使用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")
Run Code Online (Sandbox Code Playgroud)
Uwe*_*Uwe 46
如果您想以相反的顺序堆叠,请尝试
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")
Run Code Online (Sandbox Code Playgroud)
这是原始情节:
ggplot(plot_df, aes(group, fill = levels)) +
geom_bar(position = "fill")
Run Code Online (Sandbox Code Playgroud)
或者,position_fill(reverse = TRUE)
按照alistaire的建议使用他的评论:
ggplot(plot_df, aes(group, fill = levels)) +
geom_bar(position = position_fill(reverse = TRUE))
Run Code Online (Sandbox Code Playgroud)
请注意,图例中的级别(颜色)与堆叠条形图中的级别(颜色)不同.