2013-06-14 11 views
8

Sto tentando di tracciare 3 esempi della distribuzione normale, tuttavia ggplot sembra riconoscere il percorso come uno continuo piuttosto che uno stratificato per i livelli dei fattori. Sono relativamente nuovo a ggplot e qualsiasi aiuto sarebbe molto apprezzato.Tracciare le normali distribuzioni

Ecco il mio codice:

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

Come posso ottenere ggplot a riconoscere i fattori e la trama con i 3 colori diversi? Piuttosto che visualizzare un percorso continuo?

+8

Sei stato morso da silenziosa di riciclaggio di vettore di R! Inavvertitamente hai fatto P 3 volte troppo a lungo. Quindi, X e Y sono stati ripetuti una volta per ogni livello di P. Basta fare una modifica 'l <- length (x)' e tutto funziona. – bdemarest

+0

Ah ok grazie mille, avrei dovuto vederlo! – Tom

+9

+1 per un esempio riproducibile nel tuo primo post. Vorrei chiedere a @bdemarest di postare la sua osservazione come risposta in modo che OP possa accettarla come corretta. –

risposta

2

Un esempio riproducibile, utilizzando suggerimento da 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) 
Problemi correlati