如何用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
相关产品推荐
相关产品推荐

