如何在箱线图上显示异常值对应的ID
在箱线图上标注极端值对应的样本ID
1. 先筛选出离群点(极端值)
箱线图的离群点定义为小于Q1 - 1.5*IQR或大于Q3 + 1.5*IQR的数值,先计算阈值并提取对应ID:
# 你的原始数据集 Poids<-c(round(rnorm(100,65,10),1),10,53,120,98) ID<-c(paste("A",1:26,sep = ""),paste("B",1:26,sep = ""),paste("C",1:26,sep = ""),paste("D",1:26,sep = "")) mydata<-data.frame(ID=ID,Poids=Poids) # 计算四分位数与IQR q1 <- quantile(mydata$Poids, 0.25) q3 <- quantile(mydata$Poids, 0.75) iqr <- q3 - q1 # 定义离群点阈值 lower_limit <- q1 - 1.5 * iqr upper_limit <- q3 + 1.5 * iqr # 筛选所有离群点及其ID outlier_data <- mydata[mydata$Poids < lower_limit | mydata$Poids > upper_limit, ]
2. 用基础R绘制带ID标注的箱线图
直接用基础R工具链实现,操作简单直观:
# 绘制基础箱线图 boxplot(mydata$Poids, main = "体重箱线图", ylab = "体重") # 在每个离群点上方标注对应的ID text(x = 1, y = outlier_data$Poids, labels = outlier_data$ID, pos = 3)
3. 用ggplot2绘制更美观的标注箱线图
如果需要更灵活的样式控制,推荐用ggplot2,还能解决标注重叠问题:
普通标注方式
library(ggplot2) ggplot(mydata, aes(x = "", y = Poids)) + geom_boxplot() + # 在离群点上方添加ID标注,vjust调整垂直位置 geom_text(data = outlier_data, aes(label = ID), vjust = -0.5) + labs(title = "体重箱线图(带离群点ID)", y = "体重", x = "") + theme_minimal()
自动避免标注重叠(用ggrepel包)
若离群点密集导致标注重叠,用ggrepel包自动调整位置:
library(ggrepel) ggplot(mydata, aes(x = "", y = Poids)) + geom_boxplot() + geom_text_repel(data = outlier_data, aes(label = ID)) + labs(title = "体重箱线图(带离群点ID)", y = "体重", x = "") + theme_minimal()
内容的提问来源于stack exchange,提问作者Seydou GORO
相关产品推荐
相关产品推荐

