Эквивалент 'range' в boxplot для ggplot2

Я пытаюсь заставить усы geom_boxplot ggplot2 покрыть выбросы. Выбросы de facto не будут отображаться в виде точек, поскольку они заключены в прямоугольную диаграмму.

Если бы я использовал стандартный «коробчатый график», я бы использовал:

boxplot(x, range=n)

где n будет большим числом, так что вместо отображения выбросов усы диаграмм расширяются, чтобы покрыть выбросы.

Как это можно сделать с помощью ggplot2? Я пробовал:

ggplot(myDF, aes(x=x, y=y)) +
geom_boxplot(range = 5)

Примечание: я не хочу отбрасывать выбросы, используя что-то вроде:

geom_boxplot(outlier.shape = NA) 

person Ant    schedule 03.09.2013    source источник


Ответы (2)


Единственный способ, о котором я знаю, - это вычислить значения ящиков самостоятельно следующим образом:

library(plyr)
xx <- ddply(mtcars,.(cyl),
            transform,
            ymin = min(mpg),
            ymax = max(mpg),
            middle = median(mpg),
            lower = quantile(mpg,0.25),
            upper = quantile(mpg,0.75))

ggplot(data = xx,aes(x = factor(cyl))) + 
    geom_boxplot(aes(ymin = ymin,ymax = ymax,middle = middle,upper = upper,lower= lower),
                 stat = 'identity')

При вызове ddply есть несколько предупреждений, но вы можете спокойно их игнорировать.

person joran    schedule 03.09.2013
comment
Это отлично работает, спасибо. Между тем, я думаю, что, возможно, нашел другой подход к проблеме, хотя не тестировал его: (stackoverflow.com/questions/4765482/) - person Ant; 03.09.2013
comment
См. Также раздел # Использование предварительно вычисленной статистики в ?geom_boxplot - person Henrik; 03.09.2013
comment
@Ant Да, это, наверное, тоже сработает. По сути, это одно и то же: вычислить сводную статистику вручную. - person joran; 03.09.2013

Я полагаю, что этот вопрос все еще актуален, потому что эта страница в топ-3 поиска Google по этой проблеме с выбросами. Так:

Более простой способ справиться с выбросами (по крайней мере, в последнем графике ggplot от 4 апреля 2016 г.) - использовать «coef»:

... + geom_boxplot(coef = 5)

Из руководства (? Geom_boxplot вывод копипаста ниже):

coef - длина усов, кратная IQR. По умолчанию 1,5

Подробности

Верхний ус простирается от шарнира до наивысшего значения, которое находится в пределах 1,5 * IQR шарнира, где IQR - это межквартильный диапазон или расстояние между первым и третьим квартилями. Нижний ус простирается от петли до самого низкого значения в пределах 1,5 * IQR петли. Данные за пределами усов являются выбросами и отображаются в виде точек (как указано Тьюки).

На прямоугольной диаграмме с надрезом надрезы составляют 1,58 * IQR / sqrt (n). Это дает примерно 95 см. McGill et al. (1978) для получения более подробной информации.

person Dmitriy    schedule 04.04.2016