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

如何在ggplot分组箱线图中基于子集计算并标记异常值ID

解决分组箱线图中按组计算并标记异常值的问题

问题出在你当前的geom_text逻辑里:quantile()和IQR()函数是对整个数据集计算分位数和四分位距的,不是按sex分组计算,所以分组绘图时异常值判断没有遵循每组的统计边界。

解决思路是先在数据预处理阶段,按分组计算每组的异常值标记,再将标记好的结果传入绘图函数:

步骤1:预处理数据,生成分组异常值标记

用dplyr的分组计算功能,为每个数据点判断是否属于所在组的异常值,并生成对应的id标记:

data_processed <- data %>%
  group_by(sex) %>%
  mutate(
    q1 = quantile(whatever, 0.25),
    q3 = quantile(whatever, 0.75),
    iqr_val = IQR(whatever),
    outlier_id = ifelse(
      whatever > q3 + 1.5*iqr_val | whatever < q1 - 1.5*iqr_val,
      id,
      ""
    )
  ) %>%
  ungroup()

步骤2:使用预处理后的数据绘图

修改plot_sex的代码,直接调用预处理好的outlier_id列作为标签:

plot_sex <- ggplot(data_processed, aes(sex, whatever)) +
  geom_boxplot() +
  geom_quasirandom(size = .3, alpha = .3) +
  geom_text(aes(label = outlier_id), hjust = -1)

这样修改后,plot_sex里的异常值标记就会严格按照每组的四分位数和IQR来判断,而不是用全量数据的统计值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 01:57:23