R语言 在ggplot2中使用geom_text()为单个箱线图的异常值添加标签

50few1ms  于 2023-02-27  发布在  其他
关注(0)|答案(1)|浏览(117)

我有一个以R表示的正确率值的箱形图(y轴),图上的每个点代表一个不同的参与者。我想用参与者ID(Pt_ID)标记我的三个离群值。我创建了一个数据框,其中包含一列$outlier来标记这些离群值。

#Create function to identify outliers in terms of % correct
findoutlier <- function(x) {
  return(x < quantile(x, .25) - 1.5*IQR(x) | x > quantile(x, .75) + 1.5*IQR(x))
}

#Add a column to identify which participants are outliers
performance_tibble <- performance_tibble %>%
        mutate(outlier = ifelse(findoutlier(performance_tibble$Perc_Correct), Pt_ID, NA))

#Plot boxplot of %correct including outliers labelled with Pt_ID
ggplot(performance_tibble)+geom_boxplot(aes(y=Perc_Correct), outlier.colour= "red")+theme(axis.text.x = element_blank(), axis.ticks.x= element_blank())

我看过其他帖子,也尝试过使用+geom_text(aes(label=outlier),但这说明我需要x和y美学(我只有一个y变量,因为它是一个箱线图)。有人能建议如何在不需要指定x美学的情况下标记这些离群值吗?

ajsxfq5m

ajsxfq5m1#

您需要为x值添加一个虚拟值,并且将y值移到ggplot()中以便所有层都使用它会更容易。唯一的其他更改是去掉随后出现的x标签。

findoutlier <- function(x) {
  return(x < quantile(x, .25) - 1.5*IQR(x) | x > quantile(x, .75) + 1.5*IQR(x))
}

#Add a column to identify which participants are outliers
set.seed(0)
performance_tibble <- tibble(Perc_Correct = -rlnorm(30), Pt_ID=sample(1:3, 30, TRUE))

performance_tibble <- performance_tibble %>%
  mutate(outlier = ifelse(findoutlier(performance_tibble$Perc_Correct), Pt_ID, NA))

#Plot boxplot of %correct including outliers labelled with Pt_ID
ggplot(performance_tibble, aes(y=Perc_Correct, x=1)) + geom_boxplot(outlier.colour= "red")+
  geom_text(aes(label=outlier), nudge_x=0.01) +
  theme(axis.text.x = element_blank(), 
        axis.ticks.x= element_blank(),
        axis.title.x = element_blank())

相关问题