Grid Extra上的子列名称

时间:2013-07-23 22:21:52

标签: r gridextra columnname gtable

我正在尝试使用 R 中的gridExtra包创建一个表,并且我希望在一般列名下包含子列名。例如,有一个标题为“Urbana-Champaign”的大型专栏,跨越两个较小的专栏名称“元素”和“基因数”。我在gridExtra支持站点上到处查找但似乎无法找到创建包含子列的整体列名的方法。有谁知道怎么做?

1 个答案:

答案 0 :(得分: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