【问题标题】:How do I fit a very wide grid.table or tableGrob to fit on a pdf page?如何将非常宽的 grid.table 或 tableGrob 放入 pdf 页面?
【发布时间】:2014-04-03 23:46:14
【问题描述】:

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

【问题讨论】:

  • 不,设计使然。如果表格缩放到页面,则必须缩放文本以适应单元格而不是固定字体大小,我选择不这样做。
  • 这是解释,但不是原因。你为什么选择不实施?顺便说一句,很棒的工具!

标签: r pdf gridextra


【解决方案1】:

有一种方法,但不清楚当文本太宽而无法放入某些单元格时会发生什么。

一种选择是手动设置宽度,

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)

当然,对于固定的字体大小,这意味着可能会剪切一些文本。

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

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)

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      使用最新版本的 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') ))

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多