2010-10-21 8 views
18

J'ai un boxplot montrant plusieurs boîtes. Je veux connecter la moyenne pour chaque boîte avec une ligne. Le boxplot n'affiche pas la moyenne par défaut, mais la ligne médiane indique seulement la médiane. J'ai essayéMoyens de jonction sur un boxplot avec une ligne (ggplot2)

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

Cela ne fonctionne pas.

Il est intéressant de faire

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

tire le point médian dans chaque boîte. Pourquoi "ligne" ne fonctionnerait pas?

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

+1

si quelqu'un peut dire la raison d'être du groupe = 1 dans la solution de Bernd, ce serait génial. – nixbox

+0

Je suppose que ce groupe = 1 esthétique de groupe désactivée, parce que si elle est activée, les lignes sont dessinées séparément pour chaque groupe, ce qui dans le cas de la moyenne serait juste un point, donc il n'y aurait pas de lignes à dessiner. – nixbox

+0

Oui, je pense que vous avez raison. J'ai trouvé une bonne explication dans le livre de Hadley Wickham et mis à jour ma réponse. –

Répondre

27

Est-ce 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 précisions sur la configuration groupe = 1: Je pense que j'ai trouvé une explication dans le livre de Hadley Wickham "ggplot2: Elegant Graphics for Data Analysis". À la page 51, il écrit:

Différents groupes sur différentes couches.

Parfois, nous voulons tracer des résumés en fonction des différents niveaux d'agrégation . Différentes couches peuvent avoir une esthétique de groupe différente, donc que certaines affichent des données de niveau individuel tandis que d'autres affichent des résumés de groupes plus importants.

bâtiment sur l'exemple précédent, supposons que nous voulons ajouter une seule ligne lisse à l'intrigue vient de créer, sur la base sur les âges et hauteurs de tous les garçons. Si nous utilisons le même groupe pour le lissage que nous avons utilisé pour la ligne, nous obtenons le premier graphique de la figure 4.4.

p + geom_smooth (aes (groupe = Objet), 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 nécessite un groupe esthétique différent, groupe = 1, de sorte que la nouvelle ligne sera basée sur toutes les données, comme indiqué dans le deuxième graphique dans la figure. La couche modifiée se présente comme suit:

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

[...] En utilisant aes (groupe = 1) dans la couche lisse correspond à une seule ligne de meilleur ajustement à tous les garçons. »

+2

oui !, merci, mais que signifie group = 1 ici? – nixbox

+0

"Je savais que cette question viendrait :-) Désolé mais je dois avouer que je n'en ai aucune idée. Il y a quelques semaines, j'ai eu un problème similaire et j'ai trouvé cette solution quelque part qui a fonctionné pour moi. –

+0

haha, merci quand même :) – nixbox

Questions connexes