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

使用ggplot2绘制分站点岗位员工数量条形图报错求助

问题分析与解决方案

你的代码报错核心原因有两个:一是aes里的x参数错误地引用了整个数据框,应该指定为Site列;二是重复调用geom_bar的方式不符合ggplot的语法逻辑,导致变量识别失败,同时会让柱子重叠无法正确展示分组数据。

ggplot更适配长格式数据(tidy data),先把你的宽格式数据转换为长格式,再绘图会更高效且不易出错。


步骤1:加载依赖包并转换数据格式

首先加载tidyverse包(包含ggplot2和数据转换工具),然后将宽格式数据转为长格式:

library(tidyverse)

# 转换宽格式数据为长格式
salary_long <- salary_scales_counts_by_site %>%
  pivot_longer(
    cols = -Site,  # 排除Site列,将其余列转为长格式
    names_to = "Job_Role",  # 新列:岗位名称
    values_to = "Count"     # 新列:员工数量
  )

步骤2:绘制分组条形图(各岗位并列展示)

这是最常用的展示方式,每个站点下的不同岗位柱子并列:

ggplot(salary_long, aes(x = Site, y = Count, fill = Job_Role)) +
  geom_bar(stat = "identity", position = position_dodge(width = 0.8)) +  # 并列展示
  # 自定义各岗位颜色
  scale_fill_manual(
    values = c(
      "Managing Operator" = "green",
      "Operations Technician" = "blue",
      "Process Engineer" = "orange",
      "Senior Process Engineer" = "purple"
    )
  ) +
  labs(
    x = "站点",
    y = "员工数量",
    title = "各站点不同岗位员工数量统计",
    fill = "岗位名称"
  ) +
  theme_classic()

步骤3:生成4个独立的岗位图表

如果需要为每个岗位单独生成一张图,不用重复写4次代码,用分面功能即可:

ggplot(salary_long, aes(x = Site, y = Count, fill = Job_Role)) +
  geom_bar(stat = "identity") +
  scale_fill_manual(
    values = c(
      "Managing Operator" = "green",
      "Operations Technician" = "blue",
      "Process Engineer" = "orange",
      "Senior Process Engineer" = "purple"
    )
  ) +
  labs(
    x = "站点",
    y = "员工数量",
    title = "各岗位员工数量按站点统计"
  ) +
  facet_wrap(~Job_Role, ncol = 2) +  # 按岗位分面,生成4个独立图表,每行2个
  theme_classic() +
  theme(legend.position = "none")  # 单个图表无需重复显示图例

可选:堆叠条形图

如果需要展示每个站点的总员工数及各岗位占比,可使用堆叠条形图,只需把position = position_dodge()替换为position = "stack"即可:

ggplot(salary_long, aes(x = Site, y = Count, fill = Job_Role)) +
  geom_bar(stat = "identity", position = "stack") +
  scale_fill_manual(
    values = c(
      "Managing Operator" = "green",
      "Operations Technician" = "blue",
      "Process Engineer" = "orange",
      "Senior Process Engineer" = "purple"
    )
  ) +
  labs(
    x = "站点",
    y = "员工数量",
    title = "各站点不同岗位员工数量统计",
    fill = "岗位名称"
  ) +
  theme_classic()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:06:22