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

如何在ggplot中将美国州因子分组制作堆叠条形图?

实现带US子类别堆叠的条形图方案

没问题!我来帮你搞定这个分层堆叠的条形图需求~核心思路是先给你的location数据做分组映射:把California、Oregon、Texas归到US大组,同时保留它们的州名作为子类别;Canada和Mexico直接用原名称作为大组和子类别。之后用ggplot就能轻松画出你要的效果。

步骤1:数据预处理

首先我们用tidyverse工具给原始数据添加分组和子类别列:

library(tidyverse)

# 你的原始数据框
df <- data.frame(respondent = factor(c(1, 2, 3, 4, 5, 6, 7)), 
                 location = factor(c("California", "Oregon", "Mexico", "Texas", "Canada", "Mexico", "Canada")))

# 处理数据:添加大组和子类别列
df_processed <- df %>%
  mutate(
    # 定义顶级分组:将指定州归为US,其他保留原国家名
    group = case_when(
      location %in% c("California", "Oregon", "Texas") ~ "US",
      TRUE ~ as.character(location)
    ),
    # 定义堆叠用的子类别:US组显示州名,其他组显示原名称
    subgroup = case_when(
      group == "US" ~ as.character(location),
      TRUE ~ group
    )
  ) %>%
  # 转换为因子并指定顺序,保证图表显示符合预期
  mutate(
    group = factor(group, levels = c("Canada", "Mexico", "US")),
    subgroup = factor(subgroup)
  )

步骤2:绘制堆叠条形图

接下来用ggplot绘制图表,x轴用顶级分组group,填充色用子类别subgroup,自动统计每个类别的数量:

ggplot(df_processed, aes(x = group, fill = subgroup)) +
  geom_bar(position = "stack") +
  # 可选:自定义填充颜色,让US的子类别区分更清晰
  scale_fill_manual(values = c(
    "Canada" = "#4a6fe3",
    "Mexico" = "#e34a6f",
    "California" = "#6fe34a",
    "Oregon" = "#e36f4a",
    "Texas" = "#4ae36f"
  )) +
  # 添加图表标签
  labs(
    x = "Region",
    y = "Number of Respondents",
    fill = "Subregion"
  ) +
  # 用简洁的主题
  theme_minimal()

效果说明

  • Canada和Mexico的条形是单一颜色(因为它们的子类别和顶级分组一致)
  • US的条形会堆叠显示California、Oregon、Texas三个州的受访者数量
  • 如果之后需要添加更多美国州,只需要在case_when的location %in% ...列表里补充州名即可,扩展性很强

内容的提问来源于stack exchange,提问作者KaC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 10:16:24