簡體   English   中英

在 R 中使用 geom_boxplot() + geom_jitter() 時如何排除異常值

[英]How to exclude outliers when using geom_boxplot() + geom_jitter() in R

我有一個名為 mpg 的數據集。 我有興趣繪制一個箱線圖(上面有點)來查看變量 drv(傳動系統的類型)和 cty(每加侖城市英里數)之間的關系。 下面是我的代碼: ggplot(data=mpg,mapping=aes(x=drv,y=cty))+geom_boxplot(outlier.shape = NA)+geom_jitter()

有沒有辦法從 geom_jitter() 中排除異常值?

Plot

您可以使用outlier.shape=NA隱藏 geom_boxplot 的異常值。 對於 geom_jitter,你可以使用透明度來隱藏異常值,但是這些需要先定義。

mpg %>%
  group_by(drv) %>%
  mutate(cty.show = as.numeric(  # so ggplot doesn't complain about alpha being discrete
    between(cty, 
            quantile(cty)[2] - 1.5*IQR(cty),
            quantile(cty)[4] + 1.5*IQR(cty)))) %>% 
  ggplot(aes(drv, cty)) + 
  geom_boxplot(outlier.shape = NA) + 
  geom_jitter(aes(alpha=cty.show), show.legend=FALSE) +
  scale_alpha_continuous(range = c(0, 1)) # otherwise outliers only partially transparent.

在此處輸入圖像描述

對於第二個 plot,可以根據需要調整 y 限制。

geom_jitter()沒有自行丟棄異常值的論據。 您需要通過定義哪些點是異常值來手動過濾要繪制的數據點。

library(dplyr)
library(ggplot2)

mpg %>%
  group_by(drv) %>%
  mutate(cty_filtered = case_when(cty - quantile(cty)[4] > 1.5*IQR(cty) ~ NA_real_,
                                  quantile(cty)[2] - cty > 1.5*IQR(cty) ~ NA_real_,
                                  TRUE ~ cty)) %>%
  ggplot() + geom_boxplot(aes(drv, cty)) + geom_jitter(aes(drv, cty_filtered))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM