2012-08-07 15 views
24

Mam dane, w których przyglądam się różnicy wzrostu między monokulturą a kulturą mieszaną dla dwóch różnych gatunków. Dodatkowo zrobiłem wykres, aby moje dane były jasne.Jak dodać różne linie dla aspektów

Chciałbym mieć plamę z paskami błędów, cały zbiór danych jest oczywiście większy, ale dla tego wykresu jest to data.frame ze środkami dla plamki.

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

z tych danych, że wykonany jest wykres, w którym na ggplot2plant jest na osi x, a means na osi y, i zastosowano aspekt podzielenie gatunków.

To jest mój kod:

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

tej pory to jest w porządku. Jednak chcę dodać dwie różne linie poziome w dwóch aspektach. Do tego użyłem tego kodu:

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

Jednak jeśli to zrobię, mam działkę tam są dwa dodatkowe aspekty, gdzie dwie poziome linie są wykreślone. Zamiast tego chcę, aby poziome linie były drukowane w fasetach z prętami, aby nie tworzyć dwóch nowych faset. Każdy ma pomysł, jak rozwiązać ten problem.

myślę, że czyni go bardziej zrozumiałym, jeśli mogę umieścić wykres tworzę teraz:

enter image description here

+0

jest 'abline' czego szukasz? – Pop

+0

Nie Chcę tylko linii poziomej, przy danej współrzędnej y. Jednak wartość jest różna dla każdego aspektu, np. Aspekt Elytrigia ma poziomą linię na 0,511 i aspekt Festuca poziomą linię na 0,157. – Marinka

+3

Mogę zasugerować, aby wyciąć i wkleić swój zestaw danych dokładnie tak, jak jest z konsoli lub użyć 'dput (znaczy)', aby podać nam swoje dane. –

Odpowiedz

45

Upewnij się, że gatunek zmienna jest identyczna w obu zestawów danych. Jeśli to czynnik w jednym z nich, to musi to być czynnikiem w drugiej zbyt

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

+0

O tak, teraz przypomniałem sobie, że za moim gatunkiem było miejsce, jak denerwujące. Przynajmniej nie było nic złego w moim kodzie – Marinka

+0

Wydaje się nie działać dla 'geom_abline', czy też coś zepsułem? Zobacz moje pytanie http://stackoverflow.com/questions/43696806/r-ggplot-different-geom-ablines-infacets – Boern

Powiązane problemy