从 ggplot2 中的 stat_summary 中删除异常值

Romove outliers from stat_summary in ggplot2

我有这部分代码可以用我的数据生成箱线图:

p <- ggplot(meltData, aes(x=variable, y=value)) + 
  geom_boxplot()+  geom_boxplot(outlier.colour="red", outlier.shape=1,outlier.size=2)+
stat_summary(geom="text", fun=quantile,
             aes(label=sprintf("%1.1f", ..y..), color=factor(variable)),
             position=position_nudge(x=0.0), size=3.5,show_guide = FALSE)+
  ggtitle("Species measurements")+
  ggeasy::easy_center_title()
p

我有这个输出:

我希望能够在我的箱线图中看到 上部和下部胡须数 作为最大值和最小值(而不是异常值)。例如,在第 5 个箱线图中,我们可以看到最大值为 72,但这是异常值,最大值应约为 56。

如果我正确理解了您的目的,您想要创建箱线图以及显示上下胡须数的文本,并且图中不应显示异常值。如果那是真的,那么我同意@Death Metal 的观点,您可能想要过滤每个类别的异常值。

但是,由于您没有提供可重现的数据,这里有一个与您的数据相似的虚拟数据。

dat <- data.frame(var.A = c(iris$Sepal.Length, c(20,21,22)), 
                  var.B = c(iris$Petal.Length, c(20,21,22)))
meltData <- dat %>% pivot_longer(cols = c(var.A, var.B), 
                                 values_to = "value", 
                                 names_to = "variable")

ggplot(meltData, aes(x=variable, y=value)) + geom_boxplot()

清楚地显示异常值

以下是在应用箱线图之前过滤异常值的方法之一:

meltData %>% group_by(variable) %>%
     filter(value != (boxplot(value))$out) %>% 
     ggplot(aes(x = variable, y = value)) + 
     geom_boxplot() + stat_summary(geom="text", 
                                   fun=quantile,aes(label=sprintf("%1.1f", ..y..), 
                                                    color=factor(variable)),
                                   position=position_nudge(x=0.0), 
                                   size=3.5,show_guide = FALSE)+
     ggtitle("Species measurements")+
     ggeasy::easy_center_title()
#Warning message:
#`show_guide` has been deprecated. Please use `show.legend` instead. 

结果: