如何在ggplot柱状图图例中设置1975年前后出生群体分类
解决ggplot2图例合并分组的问题
修改后的完整代码
library(ggplot2) library(dplyr) # 先处理数据,新增出生分组变量 filtered_data <- agecohort_sum %>% filter(year == 2009 & !(age_cohort %in% c("0-5", "6-10", "66+"))) %>% mutate( birth_cohort = case_when( age_cohort %in% c("11-15", "16-20", "21-25", "26-30", "31-35") ~ "1975年后出生", age_cohort %in% c("36-40", "41-45", "46-50", "51-55", "56-60", "61-65") ~ "1975年前出生" ) ) # 定义颜色映射,直接对应新分组 cohort_colors09 <- c("1975年后出生" = "#FF7256", "1975年前出生" = "#EE3B3B") ggplot(filtered_data, aes(x = as.factor(age_cohort), y = flfp, fill = birth_cohort)) + geom_bar(stat = "identity", position = "dodge", width = 0.7) + labs(x = "Age cohort", y = "FLFP rate in 2009") + theme_minimal() + theme(axis.line = element_line(color='black'), plot.background = element_blank(), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.border = element_blank(), legend.title=element_blank()) + scale_fill_manual(values = cohort_colors09)
关键改动说明
- 新增统一分组变量:通过
mutate和case_when将原有的单个年龄组映射到“1975年后出生”“1975年前出生”两个统一分组,让fill参数绑定这个新分组变量,这是合并图例的核心逻辑。 - 简化颜色映射规则:颜色向量直接对应新的分组标签,无需给每个年龄组单独赋值,代码逻辑更简洁清晰。
- 分离数据处理环节:先完成数据过滤和分组转换,再传入ggplot绘图,代码结构更易读维护。
内容的提问来源于stack exchange,提问作者anrisakaki96
相关产品推荐
相关产品推荐

