在grid.table图中添加文本

32

我最近开始使用gridExtra包中的grid.table函数将表格数据转换为png图像文件以在网页上使用。到目前为止,我对它非常满意,因为它默认生成非常漂亮的输出效果,有点像表格版的ggplot2。与此问题的提问者一样,我希望能够指定单个列的对齐方式,但这已经是一个很棒的功能了。

我的问题是是否可以在grid.table周围添加文本,以便我可以给绘制的表格添加标题和脚注。我认为这应该是可行的,但我不了解足够的网格图形知识来确定如何向表格grob添加grobs。例如,这段代码:

require(gridExtra)

mydf <- data.frame(Item = c('Item 1','Item 2','Item 3'), 
                    Value = c(10,15,20), check.names = FALSE)
grid.table(mydf,
           gpar.coretext=gpar(fontsize = 16),
           gpar.coltext = gpar(fontsize = 16),
           gpar.rowtext = gpar(fontsize = 16),
           gpar.corefill = gpar(fill = "blue", alpha = 0.5, col = NA),
           h.even.alpha = 0.5,
           equal.width = FALSE,
           show.rownames = FALSE,
           show.vlines = TRUE,
           padding.h = unit(15, "mm"),
           padding.v = unit(8, "mm")
           )

生成了这个图:

enter image description here

但我真的想通过代码而不是使用另一个应用程序编辑图像来实现以下类似的效果:

enter image description here

2个回答

50

要将文本放在表格附近,您需要先评估表格的大小。

library(gridExtra)
d <- head(iris)
table <- tableGrob(d)

grid.newpage()
h <- grobHeight(table)
w <- grobWidth(table)
title <- textGrob("Title", y=unit(0.5,"npc") + 0.5*h, 
                  vjust=0, gp=gpar(fontsize=20))
footnote <- textGrob("footnote", 
                     x=unit(0.5,"npc") - 0.5*w,
                     y=unit(0.5,"npc") - 0.5*h, 
                  vjust=1, hjust=0,gp=gpar( fontface="italic"))
gt <- gTree(children=gList(table, title, footnote))
grid.draw(gt)

编辑(2015年7月17日)随着gridExtra>=2.0.0的推出,这种方法不再适用。tableGrob现在返回一个gtable,可以更轻松地自定义。

library(gridExtra)
d <- head(iris)
table <- tableGrob(d)

library(grid)
library(gtable)

title <- textGrob("Title",gp=gpar(fontsize=50))
footnote <- textGrob("footnote", x=0, hjust=0,
                     gp=gpar( fontface="italic"))

padding <- unit(0.5,"line")
table <- gtable_add_rows(table, 
                         heights = grobHeight(title) + padding,
                         pos = 0)
table <- gtable_add_rows(table, 
                         heights = grobHeight(footnote)+ padding)
table <- gtable_add_grob(table, list(title, footnote),
                         t=c(1, nrow(table)), l=c(1,2), 
                         r=ncol(table))
grid.newpage()
grid.draw(table)

谢谢,问题解决了,我从中学到了很多东西。我想我也可以在视口中使用表格和文本 grobs 等等? - SlowLearner
当然,你可以将vp赋值给gTree。 - baptiste
它可以工作,但使用后表格的颜色消失了。我只能给标题上色。 - purpleblau

5
如果您只想获得标题(不包括脚注),这是@baptiste示例的简化版本:
title <- textGrob("Title", gp = gpar(fontsize = 50))
padding <- unit(0.5,"line")
table <- gtable_add_rows(
  table, heights = grobHeight(title) + padding, pos = 0
)
table <- gtable_add_grob(
  table, list(title),
  t = 1, l = 1, r = ncol(table)
)
grid.newpage()
grid.draw(table)

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