2012-11-25 1 views
5

Sto eseguendo alcune simulazioni che mi stavo chiedendo di tracciare i risultati in un bellissimo ggplot, ma sembra che ggplot non possa occuparsi degli oggetti lista. Qualcuno sa come incollare i risultati in ggplot chart?tracciare oggetto elenco utilizzando ggplot

N <- 8619170   
    nn <- c(1000, 1200, 3000) 
    p <- .27  
    nsim <- 100 

    phat <- list() 
    for (i in 1:length(nn)) { 
    n <- nn[i] 
    x <- rhyper(nsim, N * p, N * (1 - p), n) 
    phat[[i]] <- x/n 
    } 

soluzione Ugly:

names(phat) <- paste("n=", nn) 
    stripchart(phat, method="stack") 
    abline(v=p, lty=2, col="red") 
+0

Una volta che avete la vostra lista in un formato che ggplot2 calibro, vedere alcuni degli esempi a? Geom_dotplot –

+0

Penso che la domanda è una vera domanda, vale a dire, come tracciare dati riportati in liste usando ggplot. – highBandWidth

risposta

7

ggplot2 bisogno di un data.frame come dati di origine. Quindi è necessario:

  1. trasformare i dati con reshape2 (o plyr o molti altri strumenti)
  2. trama usando qplot o ggplot

    esempio

    ## transform data 
    require(reshape2) 
    h <- do.call(cbind, phat) 
    h.melt <- melt(h) 
    
    ## rename variables so they look nicer on plots 
    names(h.melt) <- c("test","N","value")  
    
    ## stripchart (not shown) 
    qplot(data = h.melt, x = value,y = N,color=N)+geom_point() 
    
    ## histogram (not shown)  
    ggplot(h.melt,aes(x=value,fill=N))+geom_histogram()+facet_grid(N~.) 
    
    ## dotplot with rug (not shown) 
    ggplot(h.melt,aes(x=value,fill=N))+geom_dotplot()+facet_grid(N~.)+geom_rug() 
    
    ##density plot with rug (shown below) 
    ggplot(h.melt,aes(x=value,fill=N))+geom_density()+facet_grid(N~.)+geom_rug() 
    

    enter image description here

+2

Giusto per rispecchiare questa risposta un po ', potremmo nominare le colonne in modo che appaiano meglio nella trama e provare istogrammi, diagrammi di densità, dotplots e magari aggiungere tappeti. Cose come: 'nomi (h.melt) <- c (" test "," N "," valore ") ggplot (h.melt, aes (x = valore, riempimento = N)) + geom_histogram() + facet_grid (N ~.) + geom_rug() ggplot (h.melt, aes (x = valore, riempimento = N)) + geom_dotplot() + facet_grid (N ~.) + geom_rug() ggplot (h.melt, aes (x = valore, riempire = N)) + geom_density() + facet_grid (N ~.) + geom_rug() ' – MattBagg

1

Il meglio che potevo fare il tuo indizio è:

qplot(data = h.melt, x = value,y = Var2)+ geom_point(shape=1, size=5) 

ma ancora non riflette le probabilità; i punti dovrebbero essere impilati come una sorta di istogramma per riflettere le probabilità.

Un approccio diverso utilizza la funzione di densità, ma può creare problemi se ho molte categorie di campioni da tracciare.

ggplot(h.melt, aes(x=value, fill=Var2)) + geom_density(alpha=.5, position="identity")