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

ggplot绘制箱线图时如何将离群点纳入最值范围不标记为异常值

WT_C57BL6组箱线图离群点标记示例

实现方法

先明确两个核心逻辑:

  • ggplot2默认箱线图的离群点判定规则为:数值小于Q1 - 1.5*IQR或大于Q3 + 1.5*IQR的点会被标记为离群点,箱线的须端点停在1.5倍IQR范围内的最远端数据点
  • 仅调整箱线须长度、关闭离群点标记,不会改变四分位数、中位数、均值的计算结果——这些统计量默认基于全量数据计算,和离群点标记规则无关,如果你需要调整分位数计算逻辑,需要单独修改分位数算法参数。

如果要让低位数据点不被判定为离群点,箱线须直接延伸到数据最小值位置,只需要修改geom_boxplot()的两个参数即可:

  • 将coef参数设置为足够大的值(直接设为Inf即无穷大最省事,代表须的范围覆盖所有数据点,没有点会被判定为离群点)
  • 将outlier.shape设为NA,关闭默认的离群点绘制,避免和你后续加的geom_jitter抖动点重复。

修改后的核心代码示例:

library(ggplot2)
# 替换成你的实际数据框、分组列、数值列名即可
ggplot(your_data, aes(x = 分组列, y = 数值列)) +
  geom_boxplot(
    coef = Inf,
    outlier.shape = NA
  ) +
  geom_jitter(width = 0.2) # 保留你原来的抖动散点图层即可

如果你只需要针对WT_C57BL6组做这个调整,其他组保持默认的1.5倍IQR离群点判定规则,拆分图层分别绘制即可:

ggplot() +
  # 绘制其余保持默认规则的分组
  geom_boxplot(
    data = your_data[your_data$分组列 != "WT_C57BL6",],
    aes(x = 分组列, y = 数值列)
  ) +
  # 单独绘制调整规则的WT_C57BL6组
  geom_boxplot(
    data = your_data[your_data$分组列 == "WT_C57BL6",],
    aes(x = 分组列, y = 数值列),
    coef = Inf,
    outlier.shape = NA
  ) +
  geom_jitter(
    data = your_data,
    aes(x = 分组列, y = 数值列),
    width = 0.2
  )

如果你确实需要调整四分位数的计算逻辑,可以给geom_boxplot传quantile.type参数,支持1-9共9种分位数计算算法,默认值为7(R原生默认分位数算法),修改这个参数才会实际改动四分位数的排布位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:48:25