Общее
Немного сложно помочь, так как вы не предоставляете минимальный набор данных, поэтому я должен вернуться к существующим данным.
mt <- mtcars %>% select(cyl, mpg, am)
## add some outliers
mt <- rbind(mt, data.frame(cyl = c(4, 6, 8), mpg = rep(100, 3), am = 0))
База R
Вы можете разделить ваши данные в соответствии с одной из ваших переменных, соответственно установить mfrow
и использовать функцию apply
для генерации каждого графика отдельно:
## split your data according to one variable
dl <- split(mt, mt$am)
## set the mfrow
par(mfrow = 1:2)
## something more educated would be something like this
## needs to be adapted for border cases
## par(mfrow = c(ceiling(sqrt(length(dl))), ceiling(sqrt(length(dl)))))
## loop through all data sets
lapply(dl, function(d) boxplot(mpg ~ cyl, data = d, outline = FALSE))
Однако boxplot(. outliers = TRUE)
на самом деле не удаляет ваши выбросы, а вместо этого расширяет ваши усы.
ggplot
По второму вопросу вы можете сначала скрыть свои выбросы с помощью
geom_boxplot(aes(fill = Status), outlier.shape = NA)
, а затем отрегулируйте диапазон y с помощью ylim
в зависимости от ваших данных.
Примечание . Технически, вам не нужно использовать outlier.shape = NA
, потому что если вы используете ylim
, точки, находящиеся за пределами диапазона, будут в любом случае отброшены, но это делает код немного более многословным, чтобы показать, что вы хотите сделать.
Пример с набором встроенных данных
library(tidyverse)
## plot w/ outliers shown
ggplot(mt, aes(x = factor(cyl), y = mpg)) +
geom_boxplot() +
facet_wrap(~am)
## plot with outliers removed
ggplot(mt, aes(x = factor(cyl), y = mpg)) +
geom_boxplot(outlier.shape = NA) +
facet_wrap(~am) +
ylim(c(0, 50))
Протест
В вашем обновлении вы добавили графики, и я увидел, что у вас есть свободные масштабы, что сделает этот подход бесполезным, потому что вы не можете указать ylim
на панели
основа.