2014-02-27 2 views
4

Начну с MWE:Как изменить усы ящика в ggplot2?

library(ggplot2) 

p <- ggplot(mtcars, aes(factor(cyl), mpg, fill = factor(am))) 
p + geom_boxplot() 

enter image description here

Я хотел бы изменить цвет усов, например, установить его в красный цвет. Я не думаю, что это возможно сделать это прямо как geom_boxplot, так что это мой обходной путь:

library(Hmisc) 

stat_sum_df <- function(fun, geom = "crossbar", ...) { 
    stat_summary(fun.data = fun, geom = geom, width = 0.4, ...) 
} 

p + stat_boxplot(geom = 'linerange', colour = "red", position = "dodge) + 
    stat_sum_df("median_hilow", conf.int = 0.5, position = "dodge") 

enter image description here

Линия диапазоны укладываются друг на друга. Так что в следующий попробовать:

p + stat_boxplot(geom = 'linerange', colour = "red", position = position_dodge(width = .5)) + 
    stat_sum_df("median_hilow",conf.int=0.5, position = position_dodge(width = .5)) 

enter image description here

выглядит лучше, но теперь существует фиксированное пространство между коробками (сравните цил = 8 на первом и третьем участке). Поскольку я собираюсь использовать этот код для разного количества уровней am (конечно, в моих реальных данных это не am), я не знаю заранее, насколько широки будут сами ящики, поэтому я не могу установить фиксированный width для linerange без указания фиксированного width для ящиков.

Есть ли способ выборочно модифицировать бакенбарды boxplot или отрегулировать пространство между linerange элементами в соответствии с пробелом между ящиками?

+1

не совсем простой, но один из способов может быть, чтобы создать два присущи рефлективный, вербальный сверху друг друга. в одном из них вы удаляете бакенбарды и выбросы (чтобы отображались только ящики) и накладывали над ним на второй квадрат (который включает в себя бакенбарды), для которого вы меняете цвет на красный. – beetroot

ответ

6

Как насчет наложения двух ящиков на вершине друг друга. Один с красными линиями и второй сверху без каких-либо жуков.

p + geom_boxplot(color="red") + geom_boxplot(aes(ymin=..lower.., ymax=..upper..)) 
+0

Спасибо, это работает отлично! Просто вопрос: что означают точки в '..lower..' и' ..upper..'? – AnjaM

+1

Исходный data.frame фактически не имеет столбца 'lower'. Эта переменная создается в вызове 'stat_boxplot'. Переменные, созданные в статистике ggplot, могут быть использованы, вам просто нужно добавить две точки до и после имени. Аналогичным и часто используется 'geom_bin (aes (y = ..density ..))'. – shadow

+0

Хорошо, спасибо большое! – AnjaM

2

Другой вариант построения шкалы ошибок и на них сверху присущи рефлективный, вербальный без усов:

library(ggplot2) 
p + stat_boxplot(geom = "errorbar", colour = "red") + 
    geom_boxplot(coef = 0, outlier.size = 0) 

enter image description here

Смежные вопросы