histograms - stat_bin
Necesidad de extraer datos del ggplot geom_histogram (2)
Hola, he hecho una gráfica usando la función ggplot2 geom_histogram de un marco de datos. Vea la muestra a continuación y vincule al histograma ggplot. Necesite etiquetar cada geom_vline con los factores usando una función ddply anidada y un ajuste de facetas.
Ahora necesito hacer un marco de datos que contenga los datos resumidos utilizados en el diagrama anterior. ¿Alguien puede ayudar? Gracias por adelantado. GRAMO
Sector2 Family Year Length
BUN Acroporidae 2010 332.1300496
BUN Poritidae 2011 141.1467966
BUN Acroporidae 2012 127.479
BUN Acroporidae 2013 142.5940556
MUR Faviidae 2010 304.0405
MUR Faviidae 2011 423.152
MUR Pocilloporidae 2012 576.0295
MUR Poritidae 2013 123.8936667
NTH Faviidae 2010 60.494
NTH Faviidae 2011 27.427
NTH Pocilloporidae 2012 270.475
NTH Poritidae 2013 363.4635
Para obtener los valores realmente trazados, puede usar la función ggplot_build()
donde argumento es su trazado.
p <- ggplot(mtcars,aes(mpg))+geom_histogram()+
facet_wrap(~cyl)+geom_vline(data=data.frame(x=c(20,30)),aes(xintercept=x))
pg <- ggplot_build(p)
Esto hará que la lista y una de las sublistas se denomine data
. Esta sublista contiene el marco de datos con los valores utilizados en la trama, por ejemplo, para histrogramm contiene valores y
(igual que el count
). Si usa facetas, la columna PANEL
muestra en qué valores de faceta se utilizan. Si hay más de un geom_
en su trazado, los datos contendrán marcos de datos para cada uno; en mi ejemplo, hay un marco de datos para histogramm y otro para vlines.
head(pg$data[[1]])
y count x ndensity ncount density PANEL group ymin ymax
1 0 0 9.791667 0 0 0 1 1 0 0
2 0 0 10.575000 0 0 0 1 1 0 0
3 0 0 11.358333 0 0 0 1 1 0 0
4 0 0 12.141667 0 0 0 1 1 0 0
5 0 0 12.925000 0 0 0 1 1 0 0
6 0 0 13.708333 0 0 0 1 1 0 0
xmin xmax
1 9.40000 10.18333
2 10.18333 10.96667
3 10.96667 11.75000
4 11.75000 12.53333
5 12.53333 13.31667
6 13.31667 14.10000
head(pg$data[[2]])
xintercept PANEL group xend x
1 20 1 1 20 20
2 30 1 1 30 30
3 20 2 2 20 20
4 30 2 2 30 30
5 20 3 3 20 20
6 30 3 3 30 30
Si solo necesita datos, parece que layer_data
está diseñado precisamente para esto:
layer_data(p, 1)
le dará los datos de la primera capa ( ggplot_build(p)$data[[1]]
como ggplot_build(p)$data[[1]]
)