You need to enable JavaScript to run this app. 使用ggplot2做年度数据对比时如何添加种族变量实现堆叠展示
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 05:24:01