Я хотел бы построить ящики без излишеств с помощью ggplot, сосредоточив внимание только на коробках и усах
Например:
p1 <- ggplot(diamonds, aes(x=cut, y=price, fill=cut))
p1 + geom_boxplot() + facet_wrap(~clarity, scales="free")
дает ограненные ящики с выбросами
Я могу подавлять выбросы с outlier.size = NA:
p1 <- ggplot(diamonds, aes(x=cut, y=price, fill=cut))
p1 + geom_boxplot(outlier.size=NA) + facet_wrap(~clarity, scales="free")
который дает
Здесь масштаб оси Y такой же, как и в исходном графике, только выбросы не отображаются. Как теперь изменить масштаб на "увеличение" на каждой панели в соответствии с концами усов?
Я могу сбросить илим таким образом
ylim1 = boxplot.stats(diamonds$price)$stats[c(1, 5)]
а затем
p1 + geom_boxplot(outlier.size=NA)
+ facet_wrap(~clarity, scales="free")
+ coord_cartesian(ylim = ylim1*1.05)
но это не работает на грани:
Есть ли способ "facet_wrap" функции boxplots.stats?
Редактировать:
Я пытался динамически вычислять статистику boxplot, но это, похоже, не работает.
give.stats <- function(x){return(boxplot.stats(x)$stats[c(1,5)])}
p1 + geom_boxplot(outlier.size=NA) +
facet_wrap(~clarity, scales="free") +
coord_cartesian(ylim = give.stats)
> Error in min(x, na.rm = na.rm) : invalid 'type' (list) of argument
Любые идеи были бы высоко оценены.