You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在分组条形图中按组内分类变量计数降序排序?

解决每个组内条形按降序排序的问题

核心思路

要实现每个District组内,City的条形按FF计数降序排列,需先统计分组计数,再调整City的因子水平(按组内排序结果),最后完成绘图。

步骤与代码

  1. 统计分组计数:计算每个District-City组合的FF出现次数
  2. 调整因子水平:在每个District内,按FF计数降序重新排列City的顺序,将其转为因子并指定水平
  3. 绘图:使用调整后的数据集绘图,确保同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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:35:19