gtable:在 table 正文中的所有单元格周围画一条黑线

gtable: Put a black line around all cells in the table body

我正在尝试使用 gridExtra 在 table 的主体周围放置一条相对粗的线(例如 lwd = 2 尺寸)。这是根据本文档 page 稍作修改的 MWE。 gtable 正在做幕后工作,但 gtable 的文档很薄;查看代码并没有多大帮助。

g <- tableGrob(iris[1:4, 1:3], rows = NULL)
separators <- replicate(1, 
    segmentsGrob(x1 = unit(0,"npc")), 
    simplify=FALSE)
g <- gtable::gtable_add_grob(g, grobs = separators, 
    t = 1, b = nrow(g), l = 1)
g <- gtable::gtable_add_grob(g, grobs = separators, 
    t = 1, b = nrow(g), r = 3) # error: no default for l
grid.draw(g)

我正在尝试获得这样的效果(不同的数据):

gtable::gtable_add_grob 的第二次调用给出了一个错误,所以显然我的简单想法 r = 3 会将行放在第 3 列的右侧是天真的。关于如何在 table 的主体周围加粗线条有什么建议吗?如果我能理解左右边缘的想法,我假设可以类似地绘制顶线和底线。

旁注:gridExtra 最近修改为使用 gtable。以前我用类似于下面的命令制作了上面的图形;如果可能的话,我想非常接近相同的设置(新方法的行在灰度级交替,这样更好;我真的很喜欢旧的 show.box 功能)。

myt <- gridExtra::tableGrob(aov1, show.box = TRUE,
                show.rownames = TRUE, show.colnames = TRUE,
                show.csep = TRUE, show.rsep = TRUE,
                separator = "black", gp = grid::gpar(cex = table[3]))

您可以添加一个 rectGrob 跨越您想要笼中的所有单元格,

library(gridExtra)
library(gtable)
library(grid)
g <- tableGrob(iris[1:4, 1:3])
g <- gtable::gtable_add_grob(g, 
                             grobs = rectGrob(gp=gpar(fill=NA, 
                                                      lwd=2)), 
                             t = 2, b = nrow(g), l = 2, r = ncol(g))
grid.newpage()
grid.draw(g)