2015-07-19 121 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

相關問題