如何在分组条形图中按组内分类变量计数降序排序?
解决每个组内条形按降序排序的问题
核心思路
要实现每个District组内,City的条形按FF计数降序排列,需先统计分组计数,再调整City的因子水平(按组内排序结果),最后完成绘图。
步骤与代码
- 统计分组计数:计算每个
District-City组合的FF出现次数 - 调整因子水平:在每个
District内,按FF计数降序重新排列City的顺序,将其转为因子并指定水平 - 绘图:使用调整后的数据集绘图,确保同District内的City按排序后的顺序展示
完整代码如下:
library(tidyverse) df_sample = structure(list(City = c("A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "A", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "D", "E", "E", "E", "E", "E", "E", "E", "E", "E", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F", "F" ), District = c("D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D1", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2", "D2"), FF = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L)), class = "data.frame", row.names = c(NA, -99L)) # 统计分组计数并调整City的因子水平 df_sorted <- df_sample %>% count(District, City, FF, name = "FF_count") %>% # 按District分组,每组内按FF_count降序排列 group_by(District) %>% arrange(desc(FF_count), .by_group = TRUE) %>% # 将City转为因子,水平按排序后的顺序 mutate(City = fct_inorder(City)) %>% ungroup() # 绘图 ggplot(df_sorted, aes(x = City, y = FF_count, fill = District)) + geom_bar(position = "dodge", stat = "identity") + labs(title = "各District内City的FF计数降序排列", x = "城市", y = "FF计数")
代码说明
count(District, City, FF, name = "FF_count"):统计每个区域-城市-洪水风险的出现次数group_by(District) %>% arrange(desc(FF_count), .by_group = TRUE):在每个区域内按计数降序排序fct_inorder(City):将City转换为因子,水平顺序为排序后的顺序,确保绘图时按该顺序展示position = "dodge":保证同区域的城市条形并列展示
内容的提问来源于stack exchange,提问作者Ed_Gravy
相关产品推荐
相关产品推荐

