如何调整非常宽的grid.table或tableGrob以适应PDF页面?

6

我有一个相当宽的表格(页面宽度的4/3),我正在尝试使用grid.table或grid.arrange(通过tableGrob)将其打印到PDF文件中。表格超出了页面边界并被裁剪。有没有办法强制grid.table/grid.arrange将表格缩放到打印区域?


不行,这是有意为之的。如果表格按页面比例缩放,那么文本就必须按比例缩放以适应单元格大小,而我选择不这样做。 - baptiste
1
那是一个解释,但不是一个理由。你为什么选择不实现它?顺便说一句,这是一个很棒的工具! - rimorob
3个回答

6

有一种方法,但是当文本太宽无法适应某些单元格时,应该发生什么不清楚。

一个选项是手动设置宽度,

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)

当然,使用固定字体大小意味着有些文本可能会被截断。

enter image description here

更好的选择可能是引入换行符,并/或(稍微)减小字体大小。

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)

enter image description here


0

我使用字体大小完成了这个。虽然不是最好的解决方案(需要手动干预),但也许有人可以贡献更优雅的东西。

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')
)

-1

使用最新版本的gridExtra,更新rimorob的答案的正确格式如下:

termTable = tableGrob(terms, theme=ttheme_default(gpar.coretext=gpar(fontsize=8), gpar.coltext=gpar(fontsize=10, fontface='bold'), gpar.rowtext=gpar(fontsize=10, fontface='bold')))


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接