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

ggplot2堆叠柱状图:柱内填充占比异常问题求助

问题原因与解决方法

问题根源

你当前的代码错误地将Total(总计值)作为y轴映射,而堆叠柱状图需要为每个Type(结构类型)分配对应的单独数值,而非用总计值。如果你的数据是宽格式(比如Genus列之外,每个Type是单独一列,Total是各类型的总和),ggplot无法识别每个类型的具体数量,只能把每个柱子按Type的数量均分高度,导致占比完全一致。

解决步骤

  1. 转换数据格式
    把宽格式数据转成ggplot要求的长格式(每行对应一个Genus+Type的组合,记录该类型的数量),用tidyr::pivot_longer实现:

    library(tidyr)
    library(dplyr)
    
    # 排除Total列,将所有Type列转为长格式
    Brass.long <- Brass.ready %>%
      select(-Total) %>%
      pivot_longer(cols = -Genus, names_to = "Type", values_to = "Count")
    
  2. 修正绘图代码
    用转换后的Count列作为y轴,而非原有的Total:

    ggplot(Brass.long, aes(x = Genus, y = Count, fill = Type)) +
      geom_col() +
      theme(axis.text.x = element_text(angle = 65, vjust = 0.75)) +
      labs(title = "Mycorrhizal Structures Across Genera",
           x = "Genus",
           y = "Total Fungal Structures")
    

补充说明

你提供的图表显示每个属对应的柱子内,不同结构类型的填充高度完全相同,这正是因为原代码没有为每个Type绑定对应的数值,ggplot只能默认均分柱子高度。转换数据格式后,每个类型的真实数量会被正确映射到y轴,堆叠高度就会和实际数据匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 21:37:14