Возиться с другим набором данных, mtcars
, показывает то же самое, определяя, что middle
не меняет его. И у этого есть некоторые большие различия в среднем значении. Другой вариант - использование stat_summary
, хотя я не могу заставить функцию точек работать правильно, и мне пришлось настроить ее, чтобы не получить ошибку arguments imply differing number of rows: 1, 0
.
BoxMeanQuant <- function(x) {
v <- c(min(x), quantile(x, 0.25), mean(x), quantile(x, 0.75), max(x))
names(v) <- c("ymin", "lower", "middle", "upper", "ymax")
v
}
mpg %>%
ggplot(aes(x = class, y = cty)) +
stat_summary(fun.data = BoxMeanQuant, geom = "boxplot")
По сравнению с обычным geom_boxplot
, в котором не используется определенный middle
.
mpg %>%
ggplot(aes(x = class, y = cty)) +
geom_boxplot(aes(middle = mean(cty)))
Это то, что я использовал для отображения выбросов в виде точек, но они отличаются от значений по умолчанию для geom_boxplot
. Вы можете настроить по мере необходимости. Без использования if-else
будет выдано сообщение об ошибке.
BoxMeanQuant <- function(x) {
v <- c(quantile(x, 0.1), quantile(x, 0.25), mean(x), quantile(x, 0.75), quantile(x, 0.9))
names(v) <- c("ymin", "lower", "middle", "upper", "ymax")
v
}
outliers <- function(x) {
if (length(x) > 5) {
subset(x, x < quantile(x, 0.1) | quantile(x, 0.9) < x)
} else {
return(NA)
}
}
ggplot(data = mpg, aes(x = class, y = cty)) +
stat_summary(fun.data = BoxMeanQuant, geom = "boxplot") +
stat_summary(fun.y = outliers, geom = "point")