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

如何为ggplot绘制的条形图每个柱子添加对应计数标签

问题解决方案

核心问题在于你之前使用stat="count"计算计数时,标签的y轴映射用的是计数值本身,和柱子的高度(value的求和结果)属于不同度量,所以位置错位。我们可以通过两种方式解决:

方法1:提前汇总数据(更推荐,可控性高)

先通过数据汇总得到每个分组的柱子总高度和对应计数,再直接映射到绘图参数:

# 加载依赖包
library(tidyverse)

# 汇总数据:按x和groupA分组,计算柱子总高度和实例计数
df_sum <- df %>%
  group_by(x, groupA) %>%
  summarise(
    bar_height = sum(value),
    n = n(),
    .groups = "drop"
  )

# 绘图
ggplot(df_sum, aes(x = factor(x), y = bar_height, fill = groupA)) +
  geom_col(position = "stack") +
  # 自动适配正负柱子的标签位置
  geom_text(aes(label = n, vjust = ifelse(bar_height > 0, -0.2, 1.2)))

方法2:直接在ggplot层内计算

如果不想额外生成汇总表,可以用stat_summary在绘图时同步计算两个统计量:

ggplot(df, aes(x = factor(x), y = value, fill = groupA)) +
  geom_col(position = "stack") +
  stat_summary(
    aes(label = after_stat(n),
        vjust = after_stat(ifelse(y > 0, -0.2, 1.2))),
    fun = sum,
    geom = "text"
  )

两种方法都可以实现标签精准对齐在每个柱子的视觉顶端,你可以根据自己的使用习惯选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 00:54:00