R语言ggplot2绘制分组条形图并同时展示每组计数与占比
R ggplot分组条形图同时展示计数与组内占比实现方案
1. 依赖包加载
需要提前安装加载以下三个包:
library(ggplot2) library(dplyr) library(scales)
2. 数据预处理
首先修正数据集构造方式避免数据类型错误,同时计算每个Variable组内的占比:
# 构造数据集 Variable <- c("ABC","ABC","MNO","MNO","XYZ","XYZ") Flag <- c("Y","N","Y","N","Y","N") Count <- c(1234,9876,6789,3210,5500,7890) df <- data.frame(Variable, Flag, Count) # 按Variable分组计算组内各Flag的占比 df <- df %>% group_by(Variable) %>% mutate(percentage = Count/sum(Count))
3. 合并标注绘图代码
直接在geom_text的label参数中拼接计数和百分比即可,注意保持分组偏移宽度一致避免标签错位:
ggplot(df, aes(x = Variable, y = Count, fill = Flag)) + # 生成分组条形图 geom_bar(stat = "identity", position = position_dodge(width = 0.9)) + # 叠加计数+百分比标注 geom_text(aes(label = paste0(Count, "\n", percent(percentage, accuracy = 0.1))), position = position_dodge(width = 0.9), # 和条形偏移宽度保持一致 colour = "white", size = 3.5, vjust = 1.2) + # 调整标签样式和位置 labs(x = "变量", y = "计数", fill = "标识") + theme_bw()
参数调整说明
- 可修改
accuracy参数调整百分比保留的小数位数,比如accuracy=1就是保留整数百分比 - 调整
vjust参数可以上下移动标签位置,调大数值标签会向下移动,调小会向上移动 - 修改
position_dodge(width)可以调整同组两个条形的间距,需保证条形和文本的该参数一致
内容的提问来源于stack exchange,提问作者Prabhu
相关产品推荐
相关产品推荐

