2012-11-25 3 views
5

Je suis en train de faire quelques simulations que je me demandais de tracer les résultats dans un beau ggplot, mais il semble que ggplot ne peut pas gérer les objets listés. Est-ce que quelqu'un sait comment coller les résultats dans le graphique ggplot?tracer un objet liste en utilisant 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 
    } 

solution truand:

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

Une fois que vous avez votre liste dans un format qui ggplot2 aime, voir des exemples à? Geom_dotplot –

+0

Je pense que la question est une vraie question, à savoir comment tracer les données figurant dans les listes à l'aide ggplot. – highBandWidth

Répondre

7

ggplot2 ont besoin d'un data.frame comme source de données. Vous devez donc:

  1. transforment les données avec reshape2 (ou plyr ou bien d'autres outils)
  2. terrain en utilisant qplot ou ggplot

    par exemple

    ## 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

Juste pour riffer cette réponse un peu, nous pourrions nommer les colonnes de sorte qu'elles semblent mieux dans la parcelle et essayer des histogrammes, des parcelles de densité, des dotplots, et peut-être ajouter des tapis. Des choses comme: 'noms (h.melt) <- c (" test "," N "," valeur ") ggplot (h.melt, aes (x = valeur, remplissage = N)) + geom_histogram() + facet_grid (N ~.) + geom_rug() ggplot (h.melt, aes (x = valeur, remplissage = N)) + geom_dotplot() + facet_grid (N ~.) + geom_rug() ggplot (h.melt, aes (x = valeur, remplissage = N)) + geom_density() + facet_grid (N ~.) + geom_rug() ' – MattBagg

1

Le meilleur que je pouvais faire fol baisser votre indice est:

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

mais cela ne reflète toujours pas les probabilités; les points devraient être empilés comme une sorte d'histogramme pour refléter les probabilités.

Une approche différente utilise la fonction de densité, mais elle peut perturber les choses si j'ai plusieurs catégories d'échantillons à tracer.

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