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

R语言绘制按年龄区间分组、分性别堆叠的分组堆叠条形图

实现方案

你需要先把宽格式的数据集转为长格式,把Male和Female两列合并为性别分组字段,才能实现堆叠效果。完整可运行代码如下:

# 加载依赖包
library(tidyverse)

# 读取数据
data <- read.delim("emp1.txt", sep = "\t", header = TRUE)

# 数据预处理
df1 <- data %>%
  as_tibble() %>%
  # 生成年龄区间分组
  mutate(emp_class = cut(Count,
                         breaks = c(0, 30, 40, 50, 60, 100),
                         labels = c('(0-30)', '(31-40)', '(41-50)', '(51-60)', '(61-100)'))) %>%
  # 按岗位统计样本量生成x轴标签
  group_by(Emp_group) %>%
  mutate(group_n = n()) %>%
  ungroup() %>%
  mutate(x_axis = paste(Emp_group, group_n, sep = "\n")) %>%
  # 宽表转长表,提取性别和对应人数
  pivot_longer(cols = c(Male, Female), names_to = "性别", values_to = "人数") %>%
  # 计算每个岗位+年龄区间分组内的性别占比(不需要占比可以跳过这步)
  group_by(x_axis, emp_class) %>%
  mutate(占比 = 人数 / sum(人数) * 100) %>%
  ungroup()

# 绘图:按岗位设x轴,年龄区间分组并排展示,性别堆叠
ggplot(df1, aes(x = interaction(x_axis, emp_class), y = 占比, fill = 性别, alpha = emp_class)) +
  geom_col(position = "stack", color = "white") +
  # 调整x轴标签只显示岗位信息
  scale_x_discrete(labels = function(x) str_remove(x, "\\..*")) +
  # 调整图例和坐标轴标签
  labs(x = "", y = "员工占比(%)", alpha = "年龄区间", fill = "性别") +
  theme(text = element_text(size = 20),
        axis.text.x = element_text(hjust = 0.5))

如果你不需要按占比展示,直接把y轴映射改为人数即可。上述代码会生成两个图例,分别对应年龄区间和性别,每个年龄区间的条形会自动堆叠男女的占比/人数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:42:03