Средства соединения на боксплоте с линией (ggplot2) - PullRequest
20 голосов
/ 21 октября 2010

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

ggplot(data, aes(x=xData, y=yData, group=g)) 
    + geom_boxplot() 
    + stat_summary(fun.y=mean, geom="line")

Это не работает.

Интересно, что при выполнении

stat_summary(fun.y=mean, geom="point") 

в каждой ячейке отображается средняя точкаПочему «линия» не работает?

Примерно так, но с использованием ggplot2, http://www.aliquote.org/articles/tech/RMB/c4_sols/plot45.png

1 Ответ

31 голосов
/ 21 октября 2010

Это то, что вы ищете?

library(ggplot2)

x <- factor(rep(1:10, 100))
y <- rnorm(1000)
df <- data.frame(x=x, y=y)

ggplot(df, aes(x=x, y=y)) + 
geom_boxplot() + 
stat_summary(fun.y=mean, geom="line", aes(group=1))  + 
stat_summary(fun.y=mean, geom="point")

Обновление:

Некоторые пояснения по настройке группы = 1: я думаю, что нашел объяснение вКнига Хэдли Уикхем " ggplot2: Элегантная графика для анализа данных ".На странице 51 он пишет:

Разные группы на разных слоях.

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

Основываясь на предыдущем примере, предположим, что мы хотим добавить одну плавную линию к только что созданному сюжету, основываясь на возрасте и высоте всех мальчиков.Если мы используем ту же группировку для сглаживания, что и для линии, мы получим первый график на рисунке 4.4.

p + geom_smooth (aes (group = Subject), method = "lm", se =F)

Это не то, что мы хотели;мы случайно добавили сглаженную строку для каждого мальчика.Этот новый слой нуждается в другой эстетике группы, group = 1, так что новая линия будет основана на всех данных, как показано на втором графике на рисунке.Измененный слой выглядит так:

p + geom_smooth (aes (group = 1), method = "lm", size = 2, se = F)

[...] Использованиеaes (группа = 1) в гладком слое соответствует одной линии, наиболее подходящей для всех мальчиков. "

...