superponer - Voltear etiqueta de faceta y eje x con ggplot2
superponer graficas en r ggplot (1)
Estoy buscando voltear las etiquetas en un panel facetado de 1 fila y 5 columnas, de modo que los encabezados de las facetas aparezcan en la parte inferior, y el eje x aparezca en la parte superior de las facetas.
La razón es que quiero reutilizar esos encabezados para una tabla que estará directamente debajo del gráfico.
Entonces en este ejemplo ...
library(ggplot2)
my.hist<-ggplot(diamonds, aes(clarity)) + geom_bar()
my.hist + facet_wrap( ~ cut, ncol=5) + coord_flip()
Me gustaría que las etiquetas "cortadas" aparezcan debajo del gráfico. Estaba pensando que facet_grid podría tener la llave, pero es solo una suposición.
Alguien sabe cómo lograr esto?
Obtener las facetas debajo de la trama es fácil,
library(gtable)
g <- ggplotGrob(p)
strips <- gtable_filter(g, "strip_t", trim=FALSE)
grid.newpage()
grid.draw(rbind(g, strips[3,], size="first"))
los ejes, sin embargo, requieren más cuidado porque uno tiene que invertir la posición de las marcas y etiquetas. Quizás puedas comenzar con esto,
tweak_axis <- function(a){
inner <- a[["children"]]["axis"][[1]]
inner[["grobs"]] <- rev(inner[["grobs"]])
inner$grobs[[2]]$y <- inner$grobs[[2]]$y - unit(0.15, "cm")
a[["children"]]["axis"][[1]] <- inner
a
}
axes <- gtable_filter(g, "axis_b", trim=FALSE)
axes$grobs <- lapply(axes$grobs, tweak_axis)
grid.newpage()
grid.draw(axes)
Editar: en base a lo anterior, una solución "completa" podría ser
grid.newpage()
g2 <- g
new_axes <- lapply(g2$grobs[grepl("axis_b", g2$layout$name)], tweak_axis)
g$grobs[grepl("strip_t", g$layout$name)] <- new_axes
g$grobs[grepl("axis_b", g$layout$name)] <- g2$grobs[grepl("strip_t", g2$layout$name)]
# heights should be changed too, but it''s kind of ok here
xlab <- 7; title <- 1:2
grid.draw(rbind(g[xlab,], g[-c(title, xlab), ], size="last"))
(con advertencias obvias)