Joindre des moyens sur un boxplot avec une ligne (ggplot2)

j'ai un boxplot montrant plusieurs boîtes. Je veux relier la moyenne de chaque boîte avec une ligne. Le boxplot n'affiche pas la moyenne par défaut, la ligne du milieu indique seulement la médiane. J'ai essayé

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

Cela ne fonctionne pas.

C'est assez intéressant, faire

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

tire le point médian de chaque boîte. Pourquoi "la ligne" pas de travail?

quelque chose comme ça mais en utilisant ggplot2, http://www.aliquote.org/articles/tech/RMB/c4_sols/plot45.png

18
demandé sur Hugo Ideler 2010-10-21 21:00:13

1 réponses

Est-ce que vous cherchez?

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")

mise à Jour:

quelques clarifications au sujet de setting group=1: je pense que j'ai trouvé une explication dans le livre de Hadley Wickham "ggplot2: Élégant Graphiques pour l'Analyse de Données". A la page 51, Il écrit:

différents groupes sur différentes couches.

parfois nous voulons tracer des résumés basé sur différents niveaux de agrégation. Différentes couches pourraient ont une esthétique de groupe différente, donc que certains afficher niveau individuel tandis que d'autres affichent des résumés de les grands groupes.

Bâtiment sur l'exemple précédent, supposons que nous voulions ajouter un seul lisse ligne à l'intrigue juste créé, basé sur les âges et les hauteurs de tous les garçon. Si nous utilisons le même groupement le bon que nous avons utilisé pour la ligne, nous obtenons le premier graphique de la Figure 4.4.

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

Ce n'est pas ce que nous voulions; nous avons ajouté par inadvertance une ligne lissée pour chaque garçon. Cette nouvelle couche a besoin d'un groupe différent esthétique, groupe = 1, pour que la nouvelle ligne soit basée sur toutes les données, comme indiqué dans la deuxième parcelle de terrain dans la figure. La couche modifiée ressemble à ceci:

p + geom_smooth(aes(groupe = 1), method="lm", size = 2, s = F)

[...] En utilisant aes (Groupe = 1) dans couche lisse s'adapte à une seule ligne de la meilleure solution pour tous les garçons."

28
répondu Bernd Weiss 2010-10-22 10:12:50