ggplot中能否自定义离群值计算公式?默认公式是什么?
关于ggplot箱线图离群值规则的解答
1. 默认离群值计算规则
没错,ggplot2中geom_boxplot()默认的离群值判定标准就是你提到的:
- 下限阈值:
Quartile1 - 1.5*IQR - 上限阈值:
Quartile3 + 1.5*IQR
其中IQR指四分位距,即第三四分位数(Q3)减去第一四分位数(Q1)的差值。
2. 手动修改规则的方法
当然可以自定义这个判定规则,主要有两种实用方式:
方式一:调整coef参数快速修改系数
geom_boxplot()自带coef参数,默认值为1.5,你可以直接修改这个系数来调整阈值。比如把系数改成2,就会用Q1-2*IQR和Q3+2*IQR来判定离群值:
mydata3 <- data.frame(x=(c(1:10,20,100,120))) mydata3 %>% ggplot(aes(x=x))+ geom_boxplot(coef = 2)
方式二:自定义统计逻辑实现复杂规则
如果需要更灵活的自定义(比如上下限用不同系数),可以用stat_summary()替代默认统计逻辑,手动计算箱线图的各个统计量并绘制:
library(ggplot2) library(dplyr) # 自定义箱线图统计函数 custom_box_stats <- function(x) { qs <- quantile(x, c(0.25, 0.5, 0.75)) iqr <- qs[3] - qs[1] # 自定义上下限:下限用2倍IQR,上限用3倍IQR lower_thresh <- qs[1] - 2*iqr upper_thresh <- qs[3] + 3*iqr data.frame( ymin = lower_thresh, lower = qs[1], middle = qs[2], upper = qs[3], ymax = upper_thresh, outliers = x[x < lower_thresh | x > upper_thresh] ) } # 绘制自定义规则的箱线图 mydata3 %>% ggplot(aes(x = factor(1), y = x)) + stat_summary(fun.data = custom_box_stats, geom = "boxplot") + stat_summary(fun = function(x) { qs <- quantile(x, c(0.25, 0.75)) iqr <- qs[2] - qs[1] x[x < qs[1]-2*iqr | x > qs[2]+3*iqr] }, geom = "point", color = "red")
附测试代码与对应箱线图
测试代码:
mydata3 <- data.frame(x=(c(1:10,20,100,120))) mydata3 %>% ggplot(aes(x=x))+ geom_boxplot()
对应的箱线图:
内容的提问来源于stack exchange,提问作者Seydou GORO
相关产品推荐
相关产品推荐

