Этот подход немного отличается от описанного выше (назначает цветовую переменную с NA для не выпадающих значений) и включает поправку для вычислений верхней и нижней границ.
Определение «выброса» по умолчанию - это точка за 25/75 квартилем +/- 1,5 x межквартильный размах (IQR).
Сгенерируйте некоторые образцы данных:
set.seed(1)
a <- data_frame(x= factor(rep(1:4, each = 1000)),
V8 = c(rnorm(1000, 25, 4),
rnorm(1000, 50, 4),
rnorm(1000, 75, 4),
rnorm(1000, 100, 4)))
вычислить выбросы верхнего / нижнего предела (использует функции dplyr / tidyverse):
library(tidyverse)
a <- a %>% group_by(x) %>%
mutate(outlier.high = V8 > quantile(V8, .75) + 1.50*IQR(V8),
outlier.low = V8 < quantile(V8, .25) - 1.50*IQR(V8))
Определите цвет для верхней / нижней точки:
a <- a %>% mutate(outlier.color = case_when(outlier.high ~ "red",
outlier.low ~ "steelblue"))
Неклассифицированные случаи будут обозначены цветом как "NA" и не будут отображаться на графике.
Функция dplyr::case_when()
еще не полностью стабильна (может потребоваться версия для разработки github> 0.5 по адресу введите здесь описание ссылки), так что вот базовая альтернатива, если это не сработает:
a$outlier.color <- NA
a$outlier.color[a$outlier.high] <- "red"
a$outlier.color[a$outlier.low] <- "steelblue"
Участок:
a %>% ggplot(aes(x, V8)) +
geom_boxplot(outlier.shape = NA) +
geom_jitter(color = a$outlier.color, width = .2) + # NA not plotted
theme_bw() + coord_flip()
![введите описание изображения здесь](https://i.stack.imgur.com/yKMUO.png)
person
Matt L.
schedule
23.05.2017