2013-11-09 1 views
38

В этом квадратике мы видим среднее значение, но как мы можем также указать значение числа на графике для каждого значения каждого квадрата?Boxplot показывает значение среднего

ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() + 
    stat_summary(fun.y=mean, colour="darkred", geom="point", 
          shape=18, size=3,show_guide = FALSE) 
+6

+1 за короткий, самодостаточного, воспроизводимым. Например, –

+1

Дубликат http://stackoverflow.com/q/15660829/1036500 – Ben

ответ

45

Во-первых, вы можете вычислить группу средств с aggregate:

means <- aggregate(weight ~ group, PlantGrowth, mean) 

Этот набор данных может быть использован с geom_text:

library(ggplot2) 
ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) + geom_boxplot() + 
    stat_summary(fun.y=mean, colour="darkred", geom="point", 
       shape=18, size=3,show_guide = FALSE) + 
    geom_text(data = means, aes(label = weight, y = weight + 0.08)) 

Здесь + 0.08 используется, чтобы поместить метку выше точка, представляющая среднее значение.

enter image description here


Альтернативная версия без ggplot2:

means <- aggregate(weight ~ group, PlantGrowth, mean) 

boxplot(weight ~ group, PlantGrowth) 
points(1:3, means$weight, col = "red") 
text(1:3, means$weight + 0.08, labels = means$weight) 

enter image description here

+0

+1 - Я только что проработал и пришел, чтобы обновить свой ответ и BAM !. Отлично сработано. –

+0

Как вы можете уменьшить размер текста? –

+0

Кроме того, как вы можете ограничить число десятичных знаков? –

6

Вы можете также использовать функцию в stat_summary вычислить среднее и hjust аргумент, чтобы поместить текст , вам нужна дополнительная функция, но нет дополнительного фрейма данных:

fun_mean <- function(x){ 
    return(data.frame(y=mean(x),label=mean(x,na.rm=T)))} 


ggplot(PlantGrowth,aes(x=group,y=weight)) + 
geom_boxplot(aes(fill=group)) + 
stat_summary(fun.y = mean, geom="point",colour="darkred", size=3) + 
stat_summary(fun.data = fun_mean, geom="text", vjust=-0.7) 

enter image description here

15

Вы можете использовать выходное значение от stat_summary()

ggplot(data=PlantGrowth, aes(x=group, y=weight, fill=group)) 
+ geom_boxplot() 
+ stat_summary(fun.y=mean, colour="darkred", geom="point", hape=18, size=3,show_guide = FALSE) 
+ stat_summary(fun.y=mean, colour="red", geom="text", show_guide = FALSE, 
       vjust=-0.7, aes(label=round(..y.., digits=1))) 
+0

Я также хочу добавить среднее значение в ящиках. Итак, я поменял код коробки с помощью добавления stat_summary() 'и' fill = x', но получаю эту ошибку: 'Ошибка: Неизвестные параметры: hape. Кроме того: Предупреждающее сообщение: show_guide устарел. Вместо этого используйте show.legend. 'Что не так в коде? – Rocky

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