2013-07-23 55 views
1

我正在嘗試使用R中的gridExtra包創建一個表,並且我希望在通用列名下有子列名。例如,有一個名爲「Urbana-Champaign」的大型專欄,跨越兩個較小的專欄名稱「元素」和「基因數量」。我在gridExtra支持網站上到處尋找,但似乎無法找到一種方法來創建包含子列的整個列名稱。有誰知道如何?網格上的子列名額外

+0

我會大膽地猜測,你不能,而不在** **電網代碼級別的一些非常嚴重的黑客攻擊。 – joran

+0

我[嘗試](https://gist.github.com/baptiste/5561717)基於gtable的grid.table的概念證明重寫,但從未完成。它暫時支持多行標題,但我永遠無法找到一個好的語法。 – baptiste

+0

我會嘗試通過安排2個表格,一個只有一個標題的表格和另一個包含數據的表格來模擬該表格。 – agstudy

回答

0

獲得一個基本的gtable並添加新的文本是相當容易的,但是您必須添加單元格的所有格式和樣式。這就是我經常放棄的地方 - 太多的參數和選項需要照顧。

library(gtable) 
gtable_add_grobs <- gtable_add_grob #misleading name 

d <- head(iris, 3) 

extended_matrix <- cbind(c("", rownames(d)), rbind(colnames(d), as.matrix(d))) 

all_grobs <- matrix(lapply(extended_matrix, textGrob), ncol=ncol(d) + 1) 

row_heights <- function(m){ 
    do.call(unit.c, apply(m, 1, function(l) 
    max(do.call(unit.c, lapply(l, grobHeight))))) 
} 

col_widths <- function(m){ 
    do.call(unit.c, apply(m, 2, function(l) 
    max(do.call(unit.c, lapply(l, grobWidth))))) 
} 

g <- gtable_matrix("table", grobs=all_grobs, 
        widths=col_widths(all_grobs) + unit(4,"mm"), 
        heights=row_heights(all_grobs) + unit(4,"mm")) 

g <- gtable_add_rows(g, unit(1, "line"), 0) 
g <- gtable_add_grobs(g, list(textGrob("Sepal's main title"), 
           textGrob("Petal's main title")) 
        t=1,b=1,l=c(2, 4), r=c(3, 5)) 

grid.newpage() 
grid.draw(g) 

enter image description here

+0

'gridExtra :: tableGrob'現在基於gtable,使得這種自定義更容易。 – baptiste

+0

另請參閱http://stackoverflow.com/a/11775211/471093 – baptiste