2012-09-12 9 views
11

Me gustaría saber qué está haciendo exactamente geom_density(), así que justifico el gráfico y si hay alguna forma de extraer la función o los puntos que genera para cada una de las curvas que se trazan.R - ¿Qué algoritmo usa geom_density() y cómo extraer puntos/ecuación de curvas?

Gracias

+0

me encontré con que stat_density() le permite establecer parámetros. Probablemente eso responda la primera parte. Todavía quiero saber si la ecuación o los puntos se pueden extraer. – unixsnob

Respuesta

18

Typing get("compute_group", ggplot2::StatDensity) (o, anteriormente, get("calculate", ggplot2:::StatDensity)) le conseguirán el algoritmo utilizado para calcular la densidad. (En el fondo, se trata de una llamada a density() con kernel="gaussian" el valor predeterminado.)

Los puntos utilizados en la trama se forma invisible devueltos por print.ggplot(), para que pueda acceder a ellos de esta manera:

library(ggplot2) 
m <- ggplot(movies, aes(x = rating)) 
m <- m + geom_density() 
p <- print(m) 
head(p$data[[1]], 3) 
#   y  x density scaled count PANEL group ymin  ymax 
# 1 0.0073761 1.0000 0.0073761 0.025917 433.63  1  1 0 0.0073761 
# 2 0.0076527 1.0176 0.0076527 0.026888 449.88  1  1 0 0.0076527 
# 3 0.0078726 1.0352 0.0078726 0.027661 462.81  1  1 0 0.0078726 


## Just to show that those are the points you are after, 
## extract and use them to create a lattice xyplot 
library(gridExtra) 
library(lattice) 
mm <- xyplot(y ~x, data=p$data[[1]], type="l") 

enter image description here

3

Como se sugiere en otras respuestas, puede acceder a los puntos de ggot usando print.ggplot(). Sin embargo, el código print() -ing también imprime el objeto ggplot, que puede no ser deseado.

Usted puede conseguir extraer los datos de objeto ggplot, sin imprimir la trama, utilizando ggplot_build():

library(ggplot2) 
library(ggplot2movies) 

m <- ggplot(movies, aes(x = rating)) 
m <- m + geom_density() 
p <- ggplot_build(m) # <---- INSTEAD OF `p <- print(m)` 
head(p$data[[1]], 3) 
#    y  x  density  scaled count  n PANEL group ymin 
# 1 0.007376115 1.000000 0.007376115 0.02591684 433.6271 58788  1 -1 0 
# 2 0.007652653 1.017613 0.007652653 0.02688849 449.8842 58788  1 -1 0 
# 3 0.007872571 1.035225 0.007872571 0.02766120 462.8127 58788  1 -1 0 


# Just to show that those are the points you are after, extract and use them 
# to create a lattice xyplot 
library(lattice) 
m2 <- xyplot(y ~x, data=p$data[[1]], type="l") 

library(gridExtra) 
grid.arrange(m, m2, nrow=1) 

enter image description here

+1

Gracias, Megatron, ¡eso es exactamente lo que estaba buscando! – Luis

Cuestiones relacionadas