2013-06-14 13 views
8

Próbuję wykreślić 3 przykłady rozkładu normalnego, jednak wydaje się, że ggplot rozpoznaje ścieżkę jako jedną ciągłą, a nie podzieloną przez poziomy czynnika. Jestem stosunkowo nowy w ggplot i każda pomoc byłaby bardzo ceniona.Wykreślanie normalnych rozkładów

Oto mój kod:

set.seed(5872) 

x<-seq(-7.5,7.5,0.1) 
l<-length(x)*3 
df<-data.frame(P=factor(rep(c("Mean: -1, SD: 0.5","Mean: 0, SD: 1","Mean: 1, SD: 1.5"),  each=l)), 
X=(c(x,x,x)), 
Y=(c(dnorm(x,-1,0.5),dnorm(x,0,1),dnorm(x,1,1.5)))) 

Normal<-ggplot(data=df,aes(X,Y,group=P,color=P))+ 
geom_path()+ 
scale_x_continuous("")+ 
scale_y_continuous("f(x)")+ 
scale_color_discrete("Parameters")+ 
ggtitle("Normal") + 
theme(plot.title = element_text(size=25,lineheight=.8, face="bold")) 

Jak mogę uzyskać ggplot rozpoznać czynniki i działki z 3 różnych kolorach? Zamiast wyświetlać jedną ciągłą ścieżkę?

+8

zostałeś ugryziony przez cichego recyklingu R jest wektorem! Nieumyślnie popełniłeś P 3 razy zbyt długo. Następnie X i Y zostały powtórzone raz dla każdego poziomu P. Po prostu wykonaj jedną zmianę 'l <- length (x)' i wszystko działa. – bdemarest

+0

Ah ok, dziękuję bardzo, powinienem był to zobaczyć! – Tom

+9

+1 dla odtwarzalnego przykładu z pierwszego postu. Poprosiłbym @ bdemarest, aby umieścił swoją obserwację jako odpowiedź, aby OP mógł zaakceptować to jako poprawne. –

Odpowiedz

2

Powtarzalny przykład, wykorzystując podpowiedzi z bdemarest:

library(ggplot2) 

    set.seed(5872) 

    x<-seq(-7.5,7.5,0.1) 
    l<-length(x) 
    df<-data.frame(P=factor(rep(c("Mean: -1, SD: 0.5","Mean: 0, SD: 1","Mean: 1, SD: 1.5"), 
      each=l)), 
    X=(c(x,x,x)), 
    Y=(c(dnorm(x,-1,0.5),dnorm(x,0,1),dnorm(x,1,1.5)))) 

    Normal<-ggplot(data=df,aes(X,Y,group=P,color=P))+ 
    geom_path()+ 
    scale_x_continuous("")+ 
    scale_y_continuous("f(x)")+ 
    scale_color_discrete("Parameters")+ 
    ggtitle("Normal") + 
    theme(plot.title = element_text(size=25,lineheight=.8, face="bold")) 

    print(Normal)