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

R ggplot绘图求助:员工数据按百分比展示并分正负轴呈现

在R中绘制定制化员工分布图表

数据预处理

首先对数据集做排序与格式转换:

  • 按Total Number of Employees从小到大排序Location
  • 计算每个地点总员工数的占比(以L6的4564为100%基准)
  • 将Remote Number转为负值,确保其在负轴区域展示

完整代码示例

假设你的数据集名为emp_data,以下是可直接运行的实现代码:

# 加载依赖包
library(tidyverse)

# 数据预处理流程
processed_data <- emp_data %>%
  # 按总员工数升序排列地点
  arrange(`Total Number of Employees`) %>%
  # 计算总员工数占比(以L6的4564为100%)
  mutate(total_pct = (`Total Number of Employees` / 4564) * 100,
         # 远程员工数取负值,用于负轴绘制
         remote_neg = -`Remote Number`) %>%
  # 将Location转为因子,锁定排序顺序
  mutate(Location = factor(Location, levels = Location))

# 绘制定制化图表
ggplot(processed_data, aes(x = Location)) +
  # 正轴绘制本地员工条形
  geom_bar(aes(y = `Local Number`), stat = "identity", fill = "#2E86AB") +
  # 负轴绘制远程员工条形
  geom_bar(aes(y = remote_neg), stat = "identity", fill = "#F24C4C") +
  # 添加总员工数百分比标注(可调整y值改变位置)
  geom_text(aes(y = `Local Number` + 100, label = sprintf("%.1f%%", total_pct)), 
            size = 3.5) +
  # 调整Y轴刻度与标签,负轴显示绝对值
  scale_y_continuous(
    breaks = seq(-max(processed_data$`Remote Number`), max(processed_data$`Local Number`), 500),
    labels = function(x) abs(x)
  ) +
  # 设置图表标签
  labs(
    x = "地点",
    y = "员工数量",
    title = "各地点本地/远程员工分布及总员工数占比"
  ) +
  # 优化主题样式
  theme_minimal() +
  theme(
    axis.text.x = element_text(angle = 45, hjust = 1),
    plot.title = element_text(hjust = 0.5)
  )

关键细节说明

  • 排序锁定:通过arrange排序后将Location转为因子,确保绘图时地点按总员工数从小到大排列
  • 百分比计算:total_pct字段直接以L6的4564为基准,计算各地点总员工数的占比
  • 负轴展示逻辑:将远程员工数取负后,条形自动延伸至Y轴负方向,配合scale_y_continuous的标签处理,让负轴显示绝对值,更符合阅读习惯
  • 样式自定义:可根据需求修改填充色、文本位置、坐标轴刻度间隔等参数,匹配目标图表风格

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:05:15