如何在分组条形图中按类别分组并降序排列相关条形?
调整条形图的排序逻辑
要实现先按Category分组(Bread类条形全部在前,Cheese类在后),同类别内按Proportion降序排列,最终达到你要的white, wholemeal, brown, brie, camembert, gouda顺序,有两种可行方案:
方案1:动态根据类别和比例排序
这种方式会自动根据数据中的比例值调整顺序,适合数据可能更新的场景:
library(tidyverse) proportions <- df %>% group_by(Category, Sub_Category) %>% summarise(Proportion = mean(Fibre == TRUE) * 100, .groups = 'drop') %>% # 先按Category排序(字符排序下Bread自然在Cheese之前),再按比例降序 arrange(Category, desc(Proportion)) %>% # 将Sub_Category转为有序因子,水平为排序后的唯一值 mutate(Sub_Category = factor(Sub_Category, levels = unique(Sub_Category))) ggplot(data = proportions, aes(x = Proportion, y = Sub_Category, fill = Category)) + geom_col(position = "dodge") + labs(fill = "Category")
方案2:手动固定目标顺序
如果你已经确定了最终要的条形顺序,直接手动指定因子水平即可:
library(tidyverse) proportions <- df %>% group_by(Category, Sub_Category) %>% summarise(Proportion = mean(Fibre == TRUE) * 100, .groups = 'drop') %>% # 严格按照你要求的顺序设置因子水平 mutate(Sub_Category = factor(Sub_Category, levels = c("White", "Wholemeal", "Brown", "Brie", "Camembert", "Gouda"))) ggplot(data = proportions, aes(x = Proportion, y = Sub_Category, fill = Category)) + geom_col(position = "dodge") + labs(fill = "Category")
两种方案都能实现你要的效果:方案1会随数据中比例变化自动调整同类别内的条形顺序,方案2则固定为你指定的顺序,不会随数据变化改变。
内容的提问来源于stack exchange,提问作者Jay Bee
相关产品推荐
相关产品推荐

