为何ggplot绘制的箱线图与Prism等其他软件的结果存在差异
差异原因说明
导致ggplot2与Prism计算的中位数结果不一致的核心原因是你代码中使用的ylim()函数:
- ggplot2中
ylim()是scale_y_continuous(limits = ...)的简写,执行逻辑是先过滤删除所有超出设定y轴范围的观测值,再计算箱线图所需的中位数、四分位数等统计量。从你提供的示例数据可见126 Y组存在高于2500的强度值(如3470.869),这类值会被ylim(0,2.5e3)直接剔除,基于剩余值计算得到的中位数自然低于真实结果。 - Prism的轴范围设置仅控制可视化的显示区间,不会删除原始观测值,统计量计算基于全部输入数据,所以和你手动计算的结果一致。
修正方案
将ylim(0,2.5e3)替换为coord_cartesian(ylim = c(0, 2.5e3))即可,coord_cartesian()仅裁剪可视化的坐标范围,不会修改参与统计计算的原始数据,修正后的完整代码如下:
ggplot(data = df.08.long, aes(x = TMT_signals, y = as.numeric(TMT_Intensities), fill = `probe.Mod.or.not(Y/N)`)) + geom_boxplot() + coord_cartesian(ylim = c(0, 2.5e3)) + theme_classic() + theme(axis.title=element_text(size=8), axis.text=element_text(size=10), axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))
内容的提问来源于stack exchange,提问作者Chemist learns to code
相关产品推荐
相关产品推荐

