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

如何用ggbarplot绘制Y轴限0-100且完整显示的堆叠百分比条形图?

解决堆叠百分比条形图Y轴限制问题

问题出在scale_y_continuous(limits = c(0, 100))会过滤掉超出范围的数据点——虽然单个百分比都在0-100区间内,但由于浮点精度问题,g2组的百分比总和略超过100(实际计算值为100.000001),堆叠后部分条形段的位置被判定为超出范围,导致被误删。

正确的做法是用coord_cartesian(ylim = c(0, 100))替代scale_y_continuous的limits参数,它只会调整图表的显示范围,不会删除任何数据:

library(ggpubr)
# 绘制堆叠条形图,用coord_cartesian限制Y轴显示范围
ggbarplot(df, x='group', y='Percentage', fill = 'type') +
  coord_cartesian(ylim = c(0, 100)) +
  # 可选:设置Y轴刻度,让显示更清晰
  scale_y_continuous(breaks = seq(0, 100, by = 20))

如果想从根源避免浮点精度问题,可以先对每个组的百分比做归一化,确保总和严格为100:

library(ggpubr)
library(dplyr)

# 归一化百分比,确保每组总和精确为100
df_normalized <- df %>%
  group_by(group) %>%
  mutate(Percentage = Percentage / sum(Percentage) * 100) %>%
  ungroup()

# 此时用scale_y_continuous也不会丢失数据
ggbarplot(df_normalized, x='group', y='Percentage', fill = 'type') +
  scale_y_continuous(limits = c(0, 100), breaks = seq(0, 100, by = 20))

两种方法都能完整显示所有条形段,且Y轴限制在0-100之间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 16:43:15