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

如何在ggplot堆叠geom_col分面中添加不重复的条形总和数值?

问题解决:堆叠柱形分面图的总和标注重复问题

你需要在堆叠geom_col的分面图中为每个条形标注总和(总计12个唯一值),但使用geom_text时出现数值重复。以下是修正方案:

问题根源

  1. 总和数据框的生成逻辑有误:原代码用!duplicated(Fum[c('Tot.kg')])去重,会误删不同分组但总和数值相同的条目,同时left_join会引入大量重复行,导致标注重复。
  2. 绘图代码中误用了未定义的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:30:58