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

