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

如何在ggplot柱状图中为每组柱子添加非0观测值数量?

在ggplot2柱状图柱子上方添加对应组的非0观测值数量

问题分析

你需要给柱状图的每个柱子上方标注对应支出类别的非0观测数,但当前使用的mean.ind.exp是汇总后的均值数据,不包含非0观测数的统计信息,且stat_n_text的用法不符合需求。解决核心是先从原始数据计算非0观测数,再将其合并到绘图数据中,最后用geom_text完成标注。

步骤1:计算非0观测数(基于原始数据)

假设你有包含所有观测的原始数据集raw_data(含name和dollars字段),用dplyr统计每个组的非0观测数:

library(dplyr)

# 统计每个支出类别的非0观测数
non_zero_counts <- raw_data %>%
  group_by(name) %>%
  summarise(n_non_zero = sum(dollars != 0))

# 将统计结果合并到现有均值数据中
mean.ind.exp <- mean.ind.exp %>%
  left_join(non_zero_counts, by = "name")

步骤2:修改ggplot代码添加标注

将原代码中的stat_n_text替换为geom_text,并调整y轴范围避免文本超出:

library(ggplot2)

ind.exp <- ggplot(mean.ind.exp, aes(reorder(name, -mean.dollars), mean.dollars)) + 
  geom_bar(stat = "summary", alpha = 1) + 
  # 添加非0观测数标注,vjust控制垂直位置
  geom_text(aes(label = paste0("n=", n_non_zero)), 
            vjust = -0.5, size = 5, color = "black") +
  scale_y_continuous(labels = scales::label_dollar(), expand=expansion(mult=c(0, 0.15))) + 
  scale_x_discrete(labels=c('ATV/拖拉机','补充饲料/种植地','资本改良', '土地管理', '财产税', '薪资','设备维护', '招待', 
                            '种雄鹿','繁殖母鹿','其他支出','野生动物调查', '广告','DMP合规')) +                         
  labs(title='白尾鹿相关土地所有者支出', y = "平均支出", x= '支出类别')  +
  theme(plot.title = element_text(hjust = 0.5, size=30, face="bold"), 
        axis.text.x = element_text(size=30, colour = "black", angle = 30, vjust=0.5), 
        axis.text.y = element_text(size=30, colour = "black"), 
        axis.title = element_text(size=30, face='bold')) +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black")) +
  theme(plot.margin = margin(2, 4, 2, 2, "cm"))

ind.exp

关键说明

  • 如果原始数据结构不同,需调整non_zero_counts的统计逻辑,确保sum(dollars != 0)能正确统计非0观测数
  • vjust = -0.5控制文本在柱子上方的距离,可根据实际柱子高度调整数值
  • 扩大scale_y_continuous的expand参数(从0.1改为0.15)是为了避免顶部标注超出绘图区域

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 17:42:32