如何在ggplot堆叠geom_col分面中添加不重复的条形总和数值?
问题解决:堆叠柱形分面图的总和标注重复问题
你需要在堆叠geom_col的分面图中为每个条形标注总和(总计12个唯一值),但使用geom_text时出现数值重复。以下是修正方案:
问题根源
- 总和数据框的生成逻辑有误:原代码用
!duplicated(Fum[c('Tot.kg')])去重,会误删不同分组但总和数值相同的条目,同时left_join会引入大量重复行,导致标注重复。 - 绘图代码中误用了未定义的
Fum2,应为处理后的总和数据框。
修正后的代码
1. 重新生成干净的总和数据框
直接按分面+X轴的分组维度计算总和,确保每个分组仅对应一行数据:
# 第一步:重命名AROID(无需额外group_by) Finx1 <- Finx %>% mutate(AROID = recode(AROID, "645157-143904" = "Dis. Utl. Bonderydssjön", "646432-143677" = "Inloppet Tåkern", "645785-143513" = "Nära S:t Åby" )) %>% ungroup() # 第二步:生成每个分组的总和数据(每个标注项仅一行) sum_data <- Finx1 %>% group_by(AROID, Nutrient, Markan.) %>% summarize(Tot.kg = round(sum(Konc.KgM3), 0), .groups = "drop")
2. 修正绘图代码
使用干净的sum_data,确保每个条形仅标注一次总和:
ggplot(Finx1) + aes(x = AROID, fill = Marktäcke, y = Konc.KgM3) + geom_col(alpha = 0.8) + scale_fill_manual(values = wes_palette("Darjeeling1", type = "continuous", n = 17)) + theme_light() + coord_flip() + # 用sum_data匹配标注,hjust=1确保标签在条形右侧 geom_text(aes(y = Tot.kg, label = Tot.kg, fill = NULL), size = 3, data = sum_data, hjust = 1) + facet_grid(Markan. ~ Nutrient, scales = "free_x") + ylab("Total mängd i Kg/år") + xlab("Delavrinningsområde") + labs(title='Utlakning av näringsämnen 2007') + theme(plot.title = element_text(hjust = 0.5, color = "#5A5A5A"), axis.title.x = element_text(color = "#383838"), axis.title.y = element_text(color = "#383838"))
关键说明
sum_data通过group_by(AROID, Nutrient, Markan.)严格匹配分面和X轴的分组逻辑,从根源避免了重复数据。- 删除了原代码中冗余的
left_join和错误的去重步骤,简化了数据处理流程。
内容的提问来源于stack exchange,提问作者Devet
相关产品推荐
相关产品推荐

