2015-07-19 118 views
1

我试图用gridExtra在表格正文周围放一个比较粗的线(比如lwd = 2)。这里有一个从文档page略有修改的MWE。 gtable正在开展工作,但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) 

我试图让这样的(不同的数据)的影响:

sample

gtable::gtable_add_grob第二个呼叫给出了一个错误,所以很明显我的简单的概念,即r = 3将把第三列右边的行很幼稚。任何有关如何在桌子周围加重线的建议?如果我可以赞成左右边缘的想法,我认为可以类似地绘制顶部和底部线条。

附注: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])) 
+0

,如果你看一下函数定义,'功能(X,grobs,T,L, b = t,r = l',它解释了错误信息:'t'和'l'总是需要的(没有默认值)。 – baptiste

+0

@baptiste我看到了,但我无法弄清楚'l ''和'r'在划分单元格的行中的内容。 –

回答

2

你可以添加一个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) 

enter image description here

+0

你能用文字解释't = 2'?矩形的顶部位于第一行的底部或第二行的顶部。如果“第二行的顶部”是正确的方式来看待它,那么为什么'b = nrow(g)'在最后一行的底部画一条线?这是我没有得到关于这个函数中的位置参数。 –

+0

tlrb指代gtable中的索引位置(将其想象为矩阵):'t = 2,b = 5'意味着grob将从第二行到第五行(包括)放置,默认情况下' rectGrob()'扩展为占据整个视口的空间。 – baptiste

+0

顺便提一下,线条(分隔符示例)会变得更加棘手,因为可以将线段放置在给定单元格的任一边缘(顶部/底部或中间的任何位置)。但矩形很容易。 – baptiste

相关问题