ggplot leyenda separada y ttwig

Estoy usando el paquete de cuadrícula para colocar mis gráficos que hice con ggplot2 :

library(ggplot2) library(grid) Layout <- grid.layout(nrow = 4, ncol = 4, widths = unit(1, "null"), heights = unit(c(0.4, 0.8, 1.2, 1.2), c("null", "null", "null"))) grid.show.layout(Layout) plot1 = ggplot(diamonds, aes(clarity, fill = color)) + geom_bar() + facet_wrap(~cut, nrow = 1) print(plot1 + theme(legend.position = "none"), vp = viewport(layout.pos.row = 3, layout.pos.col = 1:4)) 

El problema es que quiero poner la ttwig en la tercera fila (3,1) – (3,4) y poner la leyenda en la posición (4,4). Lamentablemente, no puedo encontrar una manera de crear solo una variable de leyenda. Busqué en línea y lo más cercano que conseguí fue usando los + opts(keep = "legend_box") más antiguos + opts(keep = "legend_box") pero eso ha quedado en desuso.

solución más antigua .

Puedes obtener la leyenda del objeto grob del ggplot. Entonces podrías usar la función grid.arrange para posicionar todo.

 library(gridExtra) 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]] legend } legend <- g_legend(plot1) grid.arrange(legend, plot1+ theme(legend.position = 'none'), ncol=2, nrow=1, widths=c(1/6,5/6)) 

Hay muchos ejemplos en la web que usan la función g_legend .

HTH

Hay una función grid_arrange_shared_legend sugerida por los desarrolladores de ggplot2 ellos mismos: https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs , que funciona bastante bien.