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

实现方法
先明确两个核心逻辑:
- 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
相关产品推荐
相关产品推荐

