varias superponer leyenda histogramas gráficos graficos graficas ggplot etiquetas con r ggplot2

leyenda - superponer graficas en r ggplot



Insertar una tabla debajo de la leyenda en un histograma ggplot2 (2)

¿Hay alguna forma de hacer que grid.arrange () actúe como split.screen ()? Me gustaría organizar una mesa que se ubicará directamente debajo de la leyenda.

#create histogram my_hist<-ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() #create inset table my_table<- tableGrob(head(diamonds)[,1:3],gpar.coretext =gpar(fontsize=8),gpar.coltext=gpar(fontsize=8), gpar.rowtext=gpar(fontsize=8)) grid.arrange(my_hist,my_table, ncol=2)

produce:

pero me gustaría que se vea más o menos así:

Intenté split.screen () pero no parece funcionar con los gráficos del tipo ggplot. ¿Alguna sugerencia? Gracias.


La respuesta de Dickoa es muy clara. El mío te da más control sobre los elementos.

my_hist <- ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() #create inset table my_table <- tableGrob(head(diamonds)[,1:3], gpar.coretext = gpar(fontsize=8), gpar.coltext=gpar(fontsize=8), gpar.rowtext=gpar(fontsize=8)) #Extract Legend g_legend <- function(a.gplot){ tmp <- ggplot_gtable(ggplot_build(a.gplot)) leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box") legend <- tmp$grobs[[leg]] return(legend)} legend <- g_legend(my_hist) #Create the viewports, push them, draw and go up grid.newpage() vp1 <- viewport(width = 0.75, height = 1, x = 0.375, y = .5) vpleg <- viewport(width = 0.25, height = 0.5, x = 0.85, y = 0.75) subvp <- viewport(width = 0.3, height = 0.3, x = 0.85, y = 0.25) print(my_hist + opts(legend.position = "none"), vp = vp1) upViewport(0) pushViewport(vpleg) grid.draw(legend) #Make the new viewport active and draw upViewport(0) pushViewport(subvp) grid.draw(my_table)


Primero deberías echarle un vistazo a esta Wiki , hay muchos ejemplos (mira el archivo OrganGrob). Entonces, usando estos ejemplos, logré tener esta solución

require(gridExtra) require(ggplot2) ## original graph my_hist <- ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() ## get the legend tmp <- ggplot_gtable(ggplot_build(my_hist)) leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box") legend <- tmp$grobs[[leg]] ## create inset table my_table <- tableGrob(head(diamonds)[,1:3],gpar.coretext =gpar(fontsize=8),gpar.coltext=gpar(fontsize=8), gpar.rowtext=gpar(fontsize=8)) ### final result grid.arrange(my_hist + opts(legend.position = "none"), arrangeGrob(legend, my_table), ncol = 2)