ggplot - ¿Cómo encajo un grid.table o tableGrob muy amplio para que quepa en una página pdf?
ggplot plot table (3)
Con la versión más reciente de gridExtra, el formato correcto para actualizar la respuesta de rimorob es:
termTable = tableGrob (terms, theme = ttheme_default (gpar.coretext = gpar (fontsize = 8), gpar.coltext = gpar (fontsize = 10, fontface = ''bold''), gpar.rowtext = gpar (fontsize = 10, fontface = ''negrita'') ))
Tengo una tabla bastante ancha (4/3 de ancho de página) que estoy tratando de imprimir usando grid.table o grid.arrange (a través de tableGrob) en un archivo pdf. La tabla va más allá de los límites de la página y se recorta. ¿Hay alguna manera de forzar grid.table / grid.arrange para escalar la tabla al área de impresión?
Hay una manera, pero no está claro lo que debería suceder cuando el texto es demasiado ancho para caber en algunas celdas.
Una opción es establecer los anchos manualmente
library(grid)
library(gridExtra)
g1 <- g2 <- tableGrob(head(iris, 10), rows=NULL)
g2$widths <- unit(rep(1/ncol(g2), ncol(g2)), "npc")
grid.newpage()
gt = arrangeGrob(textGrob("page 1"), textGrob("page 2"),
rectGrob(gp=gpar(fill="grey98")),
rectGrob(gp=gpar(fill="grey98")),
nullGrob(),
layout_matrix=rbind(c(1,5,2), c(3,5,4)),
widths = unit(c(1,5,1),c("null", "cm", "null")),
heights = unit(c(1, 1),c("line", "null")),
vp = viewport(width=0.9, height=0.9))
tc = list(g1, g2)
gt <- gtable::gtable_add_grob(gt, tc, l=c(1,3), t=2,
name="newgrobs")
grid.draw(gt)
pero, por supuesto, con un tamaño de letra fijo, significa que se puede cortar un poco de texto.
Probablemente una mejor opción es introducir saltos de línea y / o (ligeramente) reducir el tamaño de la fuente.
g3 <- tableGrob(head(iris, 10), theme = ttheme_default(7),
rows=NULL, cols=gsub("//.", "///n",names(iris)))
g3$widths <- unit(rep(1/ncol(g2), ncol(g2)), "npc")
grid.newpage()
gt = arrangeGrob(textGrob("page 1"), textGrob("page 2"),
rectGrob(gp=gpar(fill="grey98")),
rectGrob(gp=gpar(fill="grey98")),
nullGrob(),
layout_matrix=rbind(c(1,5,2), c(3,5,4)),
widths = unit(c(1,1,1),c("null", "line", "null")),
heights = unit(c(1, 1),c("line", "null")),
vp = viewport(width=0.9, height=0.9))
tc = list(g2, g3)
gt <- gtable::gtable_add_grob(gt, tc, l=c(1,3), t=2,
name="newgrobs")
grid.draw(gt)
Lo hice usando tamaños de letra. No es la mejor solución (requiere intervención manual) pero tal vez alguien puede contribuir con algo más elegante.
termTable = tableGrob(terms, h.even.alpha=1, h.odd.alpha=1, v.even.alpha=0.5, v.odd.alpha=1, core.just=''left'', rows=c(),
gpar.coretext =gpar(fontsize=8),
gpar.coltext=gpar(fontsize=10, fontface=''bold''),
gpar.rowtext=gpar(fontsize=10, fontface=''bold'')
)