R语言中轴对数变换前箱线图均值位置异常问题求助
解决对数刻度箱线图均值点位置异常问题
你的问题核心是算术均值与几何均值的混淆:当前代码计算的是原始数据的算术均值(16.2),但数据中的极端大值(如340)会大幅拉高这个值,导致它在对数刻度上的位置偏离箱线图的集中区域;而你预期的应该是对数转换后数据的均值(即几何均值),它更贴合对数尺度下的中心趋势。
修正方案
修改stat_summary的fun参数,直接计算几何均值(先对数据取log10,计算均值后再转换回原始尺度):
df %>% ggplot(aes(x = 0, y = value)) + geom_boxplot(width = .12, outlier.color = NA) + # 计算几何均值作为均值点 stat_summary(fun = function(x) 10^mean(log10(x)), geom="point", shape=21, size=3, color="black", fill="grey") + labs( x = "", y = "Particle counts (P/kg)" ) + scale_y_log10(breaks = trans_breaks("log10", function(x) 10^x), labels = trans_format("log10", math_format(10^.x)))
原理说明
- 原始数据的算术均值:
mean(df$value)≈ 16.2,对应对数刻度的log10(16.2)≈1.2,这个值因极端大值被拉高,远离多数数据的集中区域。 - 几何均值:
10^mean(log10(df$value))≈0.44,它是对数转换后数据的均值还原值,更能反映对数尺度下数据的中心位置,与箱线图的分位数区域匹配。
内容的提问来源于stack exchange,提问作者Kris
相关产品推荐
相关产品推荐

