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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 03:05:28