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

如何在不含NA的ggplot2柱状图上添加NA数量标注

在ggplot填充式柱状图中添加NA数量标注

解决方案

先统计每个y分组下x的NA数量,再结合geom_text将标注批量添加到柱子右侧:

  1. 统计NA计数
library(dplyr)
library(ggplot2)

# 原始数据
df <- data.frame(y = factor(sample(letters[24:26], 50, replace=TRUE)), x = factor(sample(c(LETTERS[1:3], NA), 50, replace=TRUE)))
df[df$y=="x" & is.na(df$x),'x'] <- "A"

# 统计每个y分组的NA数量
na_counts <- df %>%
  group_by(y) %>%
  summarise(
    na_num = sum(is.na(x)),
    .groups = "drop"
  )
  1. 绘制带标注的柱状图
ggplot(df %>% filter(!is.na(x)), aes(y = y, fill = x)) +
  geom_bar(position = "fill") +
  # 将NA标注放在柱子右侧,x=1.05避免和柱子重叠
  geom_text(
    data = na_counts,
    aes(x = 1.05, y = y, label = paste0("NA: ", na_num)),
    inherit.aes = FALSE,
    hjust = 0
  ) +
  # 可选:调整x轴范围,防止标注被截断
  xlim(0, 1.2)

失败原因说明

  • 直接使用annotate("text")需要手动逐个指定每个分组的位置和文本,不仅效率低,还容易因位置计算错误导致标注偏移。
  • 保留原始数据但未提前统计NA总数,直接用geom_text无法自动聚合每个分组的NA数量,会导致标注内容混乱或错误。

内容的提问来源于stack exchange,提问作者Søren ONeill

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 02:20:10