web-dev-qa-db-fra.com

Comment ajouter des lignes différentes pour les facettes

J'ai des données où je regarde la différence de croissance entre une monoculture et une culture mixte pour deux espèces différentes. De plus, j'ai fait un graphique pour clarifier mes données.

Je veux un diagramme à barres avec des barres d'erreur, l'ensemble de données est bien sûr plus grand, mais pour ce graphique, c'est le data.frame avec les moyens pour le barplot.

plant           species     means
Mixed culture   Elytrigia   0.886625
Monoculture     Elytrigia   1.022667
Monoculture     Festuca     0.314375
Mixed culture   Festuca     0.078125

Avec ces données, j'ai fait un graphique en ggplot2, où plant est sur l'axe des x et means sur l'axe des y, et j'ai utilisé une facette pour diviser les espèces.

Voici mon code:

    limits <- aes(ymax = meansS$means + eS$se, ymin=meansS$means - eS$se)
    dodge <- position_dodge(width=0.9)

    myplot <- ggplot(data=meansS, aes(x=plant, y=means, fill=plant)) + facet_grid(. ~ species) 
    myplot <- myplot + geom_bar(position=dodge) + geom_errorbar(limits, position=dodge, width=0.25)
    myplot <- myplot + scale_fill_manual(values=c("#6495ED","#FF7F50"))
    myplot <- myplot + labs(x = "Plant treatment", y = "Shoot biomass (gr)")  
    myplot <- myplot + opts(title="Plant competition")
    myplot <- myplot + opts(legend.position = "none")
    myplot <- myplot + opts(panel.grid.minor=theme_blank(), panel.grid.major=theme_blank())

Jusqu'à présent, ça va. Cependant, je veux ajouter deux lignes horizontales différentes dans les deux facettes. Pour cela, j'ai utilisé ce code:

    hline.data <- data.frame(z = c(0.511,0.157), species = c("Elytrigia","Festuca")) 
    myplot <- myplot + geom_hline(aes(yintercept = z), hline.data)

Cependant, si je fais cela, j'obtiens un tracé où il y a deux facettes supplémentaires, où les deux lignes horizontales sont tracées. Au lieu de cela, je veux que les lignes horizontales soient tracées dans les facettes avec les barres, pas pour créer deux nouvelles facettes. N'importe qui a une idée de comment résoudre ce problème.

Je pense que c'est plus clair si je mets le graphique que je crée maintenant:

enter image description here

38
Marinka

Assurez-vous que l'espèce variable est identique dans les deux jeux de données. Si c'est un facteur dans l'un d'eux, alors ça doit aussi être un facteur dans l'autre

library(ggplot2)
dummy1 <- expand.grid(X = factor(c("A", "B")), Y = rnorm(10))
dummy1$D <- rnorm(nrow(dummy1))
dummy2 <- data.frame(X = c("A", "B"), Z = c(1, 0))
ggplot(dummy1, aes(x = D, y = Y)) + geom_point() + facet_grid(~X) + 
    geom_hline(data = dummy2, aes(yintercept = Z))

enter image description here

dummy2$X <- factor(dummy2$X)
ggplot(dummy1, aes(x = D, y = Y)) + geom_point() + facet_grid(~X) + 
    geom_hline(data = dummy2, aes(yintercept = Z))

enter image description here

60
Thierry