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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:06:01