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

双项目100%堆叠条形图百分比显示异常,请求排查代码问题

解决堆叠条形图比例与预设百分比不符的问题

嘿,我找到你代码里的问题啦!你已经预先计算好了每个类别的百分比,但当前的绘图逻辑并没有用到这些数值,反而在重新统计计数,这才导致图表比例和数据对不上。

问题根源

你用的geom_bar()是ggplot里的计数型绘图函数,它默认会统计每个value在对应variable下的出现次数,再通过position='fill'把每个条形缩放到100%。但你的数据里已经有了计算好的pct列,这个函数完全没用到它,自然会和你预期的比例不符。

修复方案

把geom_bar()换成geom_col(),并且在aes里明确指定y = pct——geom_col()是用来绘制预先计算好的数值的,这样就能直接调用你已经算好的百分比数据,完美匹配你想要的堆叠比例。

修改后的完整代码

plot_data %>%
  drop_na() %>% 
  ggplot(mapping = aes(x = variable)) +
  # 核心修改:替换为geom_col并指定y=pct
  geom_col(aes(fill = value, y = pct),
           position = 'fill',
           width = 0.30)+
  scale_y_continuous(name = '% of responders',
                     breaks = seq(from = 0, to = 1, by = 0.2),
                     minor_breaks = seq(from = 0, to = 1, by = 0.1),
                     labels = seq(from = 0, to = 100, by = 20),
                     expand = c(0,0)) +
  xlab( element_blank()) +
  scale_fill_manual(
    values = c('red', 'blue', 'green'),
    labels = c(
      'Yes',
      'No',
      'Maybe'
    ),
    drop = FALSE
  ) +
  
  guides(
    fill = guide_legend(title = 'Answer')
  ) + theme(text = element_text(size = 12), 
            panel.background = element_blank(),
            plot.margin = margin(t = 150, r =  30, b = 20, l = 0),
            axis.ticks.y = element_blank(),
            panel.grid.major = element_line(colour = 'grey'),
            axis.ticks.x = element_line(colour = 'grey'),
            panel.grid.minor = element_line(colour = 'lightgrey'),
            axis.text.y = element_text(
              size = 12,
              face = 'plain',
              hjust = 0
            )) +
  coord_flip() +
  ggtitle(str_wrap("Title", width = 50)) +
  scale_x_discrete(labels = function(x)
    str_wrap(x, width = 20))

补充说明:因为你的pct列已经是每个variable下各分类的占比(加起来等于1),所以position='fill'也可以换成position='stack',视觉效果完全一致——两种方式都能让图表严格匹配你预先计算的百分比。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:15:47