Riportando funzioni di densità predefinite utilizzando ggplot e R
Domanda
Ho tre insiemi di dati di diversa lunghezza e vorrei tracciare funzioni di densità di tutti e tre sulla stessa trama. Questo è semplice con la grafica di base:
n <- c(rnorm(10000), rnorm(10000))
a <- c(rnorm(10001), rnorm(10001, 0, 2))
p <- c(rnorm(10002), rnorm(10002, 2, .5))
plot(density(n))
lines(density(a))
lines(density(p))
Il che mi dà qualcosa di simile:
alt text http://www.cerebralmastication.com /wp-content/uploads/2009/10/density.png
Ma ho davvero voglia di fare questo con GGPLOT2 perché voglio aggiungere altre caratteristiche che sono disponibili solo con GGPLOT2. Sembra che GGPLOT vuole davvero prendere i miei dati empirici e calcolare la densità per me. E mi dà un sacco di labbro perché i miei insiemi di dati sono di diverse lunghezze. Allora, come faccio ad avere questi tre densità di trama in GGPLOT2?
Soluzione
Il segreto della felicità in ggplot2 è quello di mettere tutto nel "lungo" (o quello che io immagino matrice orientata chiamerebbero "sparse") formato:
df <- rbind(data.frame(x="n",value=n),
data.frame(x="a",value=a),
data.frame(x="p",value=p))
qplot(value, colour=x, data=df, geom="density")
Se non si desidera che i colori:
qplot(value, group=x, data=df, geom="density")