Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
gridExtra颜色带tableGrob的不同行_R_Gridextra - Fatal编程技术网

gridExtra颜色带tableGrob的不同行

gridExtra颜色带tableGrob的不同行,r,gridextra,R,Gridextra,我对gridExtra包中的tableGrob/grid.table有一个问题。使用常规参数设置,可以直接为备用行着色。然而,我希望这可能是可行的,以获得更多的控制权的颜色的行 例如,是否可以每三行使用不同的颜色? 我怀疑grid.edit函数是实现这一点的一种方法,从本链接中的示例判断:但我不知道如何将其应用于我的问题 我相信发布这个问题的人也有同样的想法 由于兼容性问题,我目前一直使用R2.13,因此如果有任何建议不涉及更高版本,那将是理想的 示例代码: library(gridExtra)

我对gridExtra包中的tableGrob/grid.table有一个问题。使用常规参数设置,可以直接为备用行着色。然而,我希望这可能是可行的,以获得更多的控制权的颜色的行

例如,是否可以每三行使用不同的颜色? 我怀疑grid.edit函数是实现这一点的一种方法,从本链接中的示例判断:但我不知道如何将其应用于我的问题

我相信发布这个问题的人也有同样的想法

由于兼容性问题,我目前一直使用R2.13,因此如果有任何建议不涉及更高版本,那将是理想的

示例代码:

library(gridExtra)

grid.table(mtcars[1:10, ],
           gpar.coretext = gpar(fontsize = 10),
           gpar.corefill = gpar(fill = "lightblue", alpha=0.5, col = NA),
           h.even.alpha = 0.5
           )

从gridExtra的v>=2.0.0开始,
网格。表格现在基于gtable,可以定制到比以前版本更深的层次。但为了完整起见,这里有一个示例说明如何突出显示特定单元格

g <- tableGrob(iris[1:4, 1:3])
find_cell <- function(table, row, col, name="core-fg"){
  l <- table$layout
  which(l$t==row & l$l==col & l$name==name)
}

ind <- find_cell(g, 3, 2, "core-fg")
ind2 <- find_cell(g, 2, 3, "core-bg")
g$grobs[ind][[1]][["gp"]] <- gpar(fontsize=15, fontface="bold")
g$grobs[ind2][[1]][["gp"]] <- gpar(fill="darkolivegreen1", col = "darkolivegreen4", lwd=5)
grid.draw(g)

g欢迎来到Stack Overflow,很好地参考了您自己的其他问题,表明您自己做了一些工作。我建议您在以后的问题中使用您自己的数据、“假”数据或内置数据,例如
mtcars
数据集,包括一个。简单,确实是最小的,是最好的(我已经在你的中添加了一个),只足以让其他人复制、粘贴和实验。我不知道是否还有人在听,但我还是会尝试:是否可以调整find_cell函数,使其一次找到多个不同的单元格,而不是一个接一个?例如,所有萼片长度>4.8都用粗体书写。我有一个带有统计显著性检验的表格GROB,我需要所有小于0.05的值都用粗体表示。最好在一个函数中实现这一点,而不是为每个单元格手动执行。谢谢“core fg”这个名字是什么意思?表格分为三个部分:列标题、行标题和核心单元格(正文)。每一部分都有两个“层”:一个背景矩形(此处为核心为灰色,列标题为深色),一个前景(“fg”)为文本。
find_cells <- function(table, row, col, name="core-fg"){
  l <- table$layout
  unlist(Map(function(r, c) which(((l$t-1) == r) & ((l$l-1) == c) & (l$name == name)), row, col))
}

modify_cells <- function(g, ids, gp=gpar()){
  for(id in ids) g$grobs[id][[1]][["gp"]] <- gp
  return(g)
}

ids <- find_cells(g, 1:3, c(3,2, 1), "core-fg")
g <- modify_cells(g, ids, gpar(fontsize=15, fontface="bold"))

grid.newpage()
grid.draw(g)
faces <- sample(1:4, size = prod(dim(iris[1:4, 1:2])), replace = TRUE)
tt <- ttheme_default(core=list(fg_params=list(fontface=faces)))

grid.table(iris[1:4, 1:2], theme=tt)