Как исключить выбросы при использовании geom_boxplot () + geom_jitter () в R - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть набор данных с именем mpg. Я заинтересован в том, чтобы построить коробочный график (с точками на нем), чтобы увидеть взаимосвязь между переменной drv (тип привода) и cty (городские мили на галлон). Ниже мой код: ggplot(data=mpg,mapping=aes(x=drv,y=cty))+geom_boxplot(outlier.shape = NA)+geom_jitter()

Есть ли способ исключить выбросы из geom_jitter ()?

График

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Вы можете скрыть выбросы для geom_boxplot с помощью outlier.shape=NA. Для 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.

enter image description here

Для второго графика, y -лимиты могут быть скорректированы при необходимости.

1 голос
/ 21 апреля 2020

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))
...