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

如何绘制不单独显示异常值的R箱线图并自定义计算逻辑

自定义箱线图(无单独异常值点+自主控制计算逻辑)

核心思路

不同于outline=FALSE仅隐藏默认识别的异常值点,要实现需求的关键是自主计算箱线图所需的统计量(中位数、四分位数、须的上下限),让须直接延伸到数据的最大/最小值(或自定义范围),从根源上把所有数据纳入箱线图的展示逻辑,而非依赖R的默认规则。


方法一:基础R实现

步骤1:自定义统计量计算

根据需求自行定义四分位数、须的范围等统计规则,示例中我们将须的上下限设为数据的最值,同时指定四分位数的计算类型:

# 用iris数据集的Sepal.Length列演示
data <- iris$Sepal.Length

# 自定义统计量计算函数
custom_stats <- function(x) {
  # 用type=6计算四分位数,可根据需求修改type参数(1-9对应不同计算规则)
  qs <- quantile(x, probs = c(0, 0.25, 0.5, 0.75, 1), type = 6)
  names(qs) <- c("min", "Q1", "median", "Q3", "max")
  return(qs)
}

# 生成自定义统计值
stats <- custom_stats(data)

步骤2:绘制箱线图

通过boxplot()的stats参数传入自定义统计量,设置range=0让须延伸到最值,outline=FALSE避免额外显示异常值点:

boxplot(data, 
        stats = matrix(stats, nrow=5), 
        range = 0, 
        outline = FALSE,
        main = "自定义箱线图(基础R)",
        ylab = "Sepal Length")

方法二:ggplot2实现

步骤1:提前计算分组统计数据框

如果是分组数据,先按分组计算自定义统计量,整理成规范的数据框:

library(ggplot2)
library(dplyr)

# 按Species分组计算自定义统计量
custom_box_stats <- iris %>%
  group_by(Species) %>%
  summarise(
    min = min(Sepal.Length),
    Q1 = quantile(Sepal.Length, 0.25, type = 6),
    median = median(Sepal.Length),
    Q3 = quantile(Sepal.Length, 0.75, type = 6),
    max = max(Sepal.Length)
  )

步骤2:用stat="identity"绘制箱线图

直接使用提前计算好的统计值绘制箱线图,无需依赖ggplot2的默认统计逻辑:

ggplot(custom_box_stats, aes(x = Species, ymin = min, lower = Q1, middle = median, upper = Q3, ymax = max)) +
  geom_boxplot(stat = "identity", fill = "#69b3a2") +
  labs(title = "自定义箱线图(ggplot2)", y = "Sepal Length") +
  theme_minimal()

替代方案:自定义统计函数

如果不想提前计算,也可以给stat_boxplot()传入自定义统计函数,直接在绘图时计算:

# 自定义箱线统计函数
custom_boxplot_stat <- function(x) {
  qs <- quantile(x, probs = c(0, 0.25, 0.5, 0.75, 1), type = 6)
  data.frame(
    ymin = qs[1],
    lower = qs[2],
    middle = qs[3],
    upper = qs[4],
    ymax = qs[5]
  )
}

# 绘制箱线图
ggplot(iris, aes(x = Species, y = Sepal.Length)) +
  stat_boxplot(fun.data = custom_boxplot_stat, fill = "#69b3a2") +
  labs(title = "自定义统计函数的箱线图", y = "Sepal Length") +
  theme_minimal()

关键说明

  • 四分位数规则:quantile()的type参数有9种可选(1-9),对应不同的行业标准计算逻辑,可按需调整。
  • 须的范围:如果不想延伸到最值,也可以自定义须的上下限(比如用2IQR代替默认的1.5IQR),只需修改统计量计算中的min和max为对应值即可。

内容的提问来源于stack exchange,提问作者Maciej

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:07:37