如何在ggplot中分组因子水平,将美国各州堆叠为单一条形?
简便实现堆叠美国州的条形图方案
其实不用复杂操作,只需要先给数据加一个大类分组列,再调整ggplot的映射逻辑就能搞定,步骤很清晰:
1. 新增区域分组列
我们需要把所有美国州统一归到"US"这个大类里,同时保留原始的location信息(满足你不想合并州的需求)。这里提供两种实现方式:
方式一:用dplyr(推荐,语法更直观)
library(dplyr) df <- df %>% mutate(region = case_when( grepl("US:", location) ~ "US", TRUE ~ as.character(location) )) %>% mutate(region = factor(region)) # 转成因子保证分类顺序
方式二:Base R实现(无需额外包)
df$region <- as.character(df$location) df$region[grepl("US:", df$region)] <- "US" df$region <- factor(df$region)
2. 绘制堆叠条形图
现在用region作为x轴的分类,用原始的location作为填充色(美国的三个州会自动堆叠在一起):
library(ggplot2) ggplot(df, aes(x = region, fill = location)) + geom_bar(stat = "identity") + theme(axis.text.x = element_text(angle = 45, hjust = 1), text = element_text(size=10)) + labs(fill = "细分区域") # 可以给图例改个更清晰的名字
效果说明
- x轴会显示三个独立条形:加拿大、墨西哥、美国
- 美国的条形会拆分成三个州的堆叠部分,每个州对应不同颜色,完美保留了你需要的州区分信息
- 原始的
location列完全未被修改,后续数据分析依然可以正常使用
这样操作既简单,又完全满足你的需求,比复杂的自定义堆叠逻辑省心多了~
内容的提问来源于stack exchange,提问作者KaC
相关产品推荐
相关产品推荐

