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

如何在ggplot分组计数柱状图中添加对应分组的总支出信息?

问题解决:在Program计数柱状图中添加总支出信息

问题背景

需要绘制program变量的横向计数柱状图,并在图中显示每个program对应的总支出。现有数据集及初始绘图代码如下:

数据集代码

projects <- read.table(text="
program               Expense
schools               15000
hospitals             180000
forest                30000
marine                200000
schools               7000
marine                29000
forest                4300
forest                1800
schools               1789",header=TRUE)

初始绘图代码(可正常运行)

projects |> 
  group_by(program)|> 
  summarise(count=n())|> 
  ggplot(aes(x = reorder(program,(-count),decreasing=T), y = count, fill= "grey")) + 
  geom_bar(stat = 'identity') + 
  theme_clean()+
  coord_flip()

报错原因

修改代码添加总支出时出现错误,核心问题有两个:

  • 分组汇总时仅计算了计数count,未保留或计算总支出数据,导致ggplot调用sum(expense)时找不到对应变量
  • 变量名拼写错误:数据集中的支出列是Expense(首字母大写),代码中写成了小写的expense

解决代码

修改分组汇总步骤,同时统计计数和总支出,再在geom_text中调用汇总后的总支出数据:

projects |> 
  group_by(program)|> 
  # 同时统计计数和总支出
  summarise(count = n(), total_expense = sum(Expense)) |> 
  ggplot(aes(x = reorder(program, (-count), decreasing=T), y = count, fill= "grey")) + 
  geom_bar(stat = 'identity') + 
  theme_clean()+
  coord_flip() +
  # 添加总支出标签,调整位置避免与柱子重叠
  geom_text(aes(label = paste("总支出:", total_expense)), 
            hjust = -0.1,
            color = "black")

代码说明

  • summarise新增total_expense = sum(Expense):按program分组计算总支出,确保数据框包含该字段
  • geom_text中使用total_expense作为标签内容,通过hjust参数调整标签位置,避免与柱子重叠;也可根据需求修改y参数调整垂直位置(横向图中对应x轴方向)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:43:10