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

如何在R中绘制按性别拆分的收入Top20职业堆叠条形图

R语言按性别拆分堆叠条形图实现方案

步骤说明

  • 首先保留原有逻辑筛选出的收入Top20职业,确保和之前的统计范围一致
  • 基于筛选出的20个职业,计算每个职业不同性别的平均收入
  • 调整数据格式后直接用barplot生成堆叠条形图

完整可运行代码(兼容你原有基础绘图逻辑)

# 原有逻辑:计算各职业平均收入,筛选Top20
pay <- tapply(exp$INC, exp$OCC, mean)
toppay <- sort(pay, decreasing = TRUE)[1:20]

# 新增1:提取Top20职业列表,过滤原数据集
top_occs <- names(toppay)
exp_top <- exp[exp$OCC %in% top_occs, ]

# 新增2:计算分职业分性别的平均收入,按原收入高低排序
pay_by_sex <- tapply(exp_top$INC, list(exp_top$OCC, exp_top$SEX), mean)
# 匹配Top20职业的排序,避免条形顺序错乱
pay_by_sex <- pay_by_sex[match(top_occs, rownames(pay_by_sex)), ]
# 可选:缺失值补0,避免某职业无对应性别数据时报错
pay_by_sex[is.na(pay_by_sex)] <- 0

# 绘制堆叠横向条形图
barplot(t(pay_by_sex), # 转置矩阵,保证每个职业对应一个堆叠条形
        las = 1,
        cex.names = 0.6,
        main = "Top 20最高收入职业分性别平均收入",
        xlab = "家庭总收入",
        col = c("#f8766d", "#00bfc4"), # 可自定义性别对应颜色
        horiz = TRUE,
        legend.text = colnames(pay_by_sex), # 自动读取性别值做图例
        args.legend = list(x = "bottomright", cex = 0.8)) # 调整图例位置大小

可选ggplot2实现(样式调整更灵活)

如果你已经安装了ggplot2和dplyr包,也可以用以下代码实现:

library(ggplot2)
library(dplyr)

# 统计分职业分性别的平均收入
exp_stat <- exp %>%
  filter(OCC %in% top_occs) %>%
  group_by(OCC, SEX) %>%
  summarise(avg_inc = mean(INC), .groups = "drop") %>%
  # 按收入高低给职业排序,保证图表顺序和原有逻辑一致
  mutate(OCC = factor(OCC, levels = rev(top_occs)))

# 绘制堆叠条形图
ggplot(exp_stat, aes(x = avg_inc, y = OCC, fill = SEX)) +
  geom_col(position = "stack") +
  labs(title = "Top 20最高收入职业分性别平均收入", x = "家庭总收入", y = "职业") +
  theme_minimal() +
  theme(axis.text.y = element_text(size = 6))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:36:03