使用ggplot2做年度数据对比时如何添加种族变量实现堆叠展示
修改后可实现按种族堆叠展示的完整代码
library(tidyverse) library(car) data1820$Q8_4 = car::recode(data1820$Q8_4, "1='Yes'; 2 = 'No'; 3 = 'NR'") data1820$Q8_4 <- factor(data1820$Q8_4, levels = c("Yes", "No", "NR")) # 若你的种族字段需要重新编码/转因子,可在此处添加对应处理逻辑 # 统计各年份、各回答类别下不同种族的占比 df <- data1820 %>% group_by(year, Q8_4, race) %>% # 此处race替换为你数据集中实际的种族字段名 count(name = "n") %>% na.omit() %>% group_by(year, Q8_4) %>% mutate(Percent = n / sum(n) * 100) g <- ggplot(df, aes(x = Q8_4, y = Percent, fill = race)) + geom_bar(stat = 'identity', position = "stack") + # 明确设置为堆叠柱状图 facet_grid(cols = vars(year)) + theme( panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), strip.background = element_blank(), panel.spacing = unit(4, "lines"), text = element_text(family = "Helvetica", size = 10), axis.ticks.x = element_blank(), axis.title.x = element_blank(), axis.title.y = element_blank(), plot.title = element_text(hjust = 0.5, vjust = 2), legend.title = element_blank(), plot.margin = margin(10, 10, 10, 10) ) + labs(title = "你目前是否有任何形式的医保覆盖", y = "占比", fill = "种族") + # colors向量需匹配你种族分类的数量调整,如有4个种族就配置4个颜色值 scale_fill_manual(values = colors, na.value = "grey") + scale_y_continuous(labels = scales::percent_format(scale = 1))
核心调整说明
- 数据汇总阶段新增种族字段作为分组维度,保证能拆分出每个回答类别下不同种族的占比数据
- 绘图的填充映射从年份改为种族,实现不同种族对应不同颜色
- 柱状图新增堆叠参数,满足堆叠数据展示需求
- 移除了隐藏图例的配置,展示种族与颜色对应的图例说明
- 原代码中未用到线型映射的
scale_linetype_manual配置可直接删除
内容的提问来源于stack exchange,提问作者Auva Shariatmadari
相关产品推荐
相关产品推荐

