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

