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
相关产品推荐
相关产品推荐

