3

我正在查看这个链接,它会生成一个网格表并进行文本格式化。有什么办法可以进行条件格式化吗?例如

  1. 根据值设置背景颜色
  2. 否则将负值显示为红色和蓝色

source("http://gridextra.googlecode.com/svn/trunk/inst/tableGrob2.r")
library(grid)

tc  = textConnection("
 carat   VeryLongWordIndeed color clarity depth
14513  1.35 Ideal     J     VS2  61.4
28685  0.30  Good     G    VVS1  64.0
50368  0.75 Ideal     F     SI2  59.2")
d = read.table(tc,head=T)
close(tc)
grid.newpage()
g = grid.table2(d)
grid.gedit(paste("cells-fill-",1,2,sep=""), gp=gpar(fill="red"))

这按预期工作。但如果你有超过 10 行,它不会。它为多个单元格着色。例如

d<-do.call("rbind", replicate(10, d, simplify = FALSE))
grid.newpage()
g = grid.table2(d)
grid.gedit(paste("cells-fill-",1,2,sep=""), gp=gpar(fill="red"))

如何避免这种情况?

4

5 回答 5

3

在早期版本的 grid.table 中有一种方法;不幸的是,它与后来的一些功能不兼容。我已将代码副本放在inst/tableGrob2.r. 你可以试试,

library(grid)

 tc  = textConnection("
     carat   VeryLongWordIndeed color clarity depth
 14513  1.35 Ideal     J     VS2  61.4
 28685  0.30  Good     G    VVS1  64.0
 50368  0.75 Ideal     F     SI2  59.2")
 d = read.table(tc,head=T)
 close(tc)
 grid.newpage()
 g = grid.table2(d)
 grid.ls(g)
 grid.gedit("top-head-fill-(1|3|5)", gp=gpar(fill="red"))
 grid.gedit("cells-fill-.3", gp=gpar(fill="green"))
 grid.edit("cells-label-33", label=expression(alpha),gp=gpar(col="orange"))
于 2012-08-03T20:39:36.437 回答
1

我认为@baptiste 可能已经交换了 rows 和 columns 。在这里,我将第二行第一列设置为 2,然后构造一个测试并更改填充参数。我需要将行值放在第二位:

tc  = textConnection("
     carat   VeryLongWordIndeed color clarity depth
 14513  1.35 Ideal     J     VS2  61.4
 28685  2  Good     G    VVS1  64.0
 50368  0.75 Ideal     F     SI2  59.2")
 d = read.table(tc,head=T)
 close(tc)
 grid.newpage()
 g = grid.table2(d)
 grid.ls(g)
 grid.gedit("top-head-fill-(1|3|5)", gp=gpar(fill="red"))
 rc = which(d==2, arr.ind=TRUE); loc <- paste("cells-label-", rc[2], rc[1], sep="")
 rc; loc
#      row col
#28685   2   1
#[1] "cells-label-12"
 grid.edit(loc, label=expression(alpha), gp=gpar(col="orange"))

“橙色”颜色出现在第二行第一列。您可能需要指定一个更好的示例,其中包括构建调色板。

于 2012-08-04T08:22:16.247 回答
1

@baptiste,为什么不能通过直接修改表格单元格gpar来自定义它们。'tableGrob' 生成的结构似乎是单独存储这些的。例如:

exTable <- tableGrob(head(iris))
exTable$lg$lgt[[42]]$gp

显示该结构存储单元格 # 42 的“col”和“cex”值,但直接更改这些值,例如,

exTable$lg$lgt[[42]]$gp$col <- "red"

似乎对输出没有任何影响。

grid.draw(exTable)
于 2012-09-04T21:08:57.070 回答
0

我也在尝试这种单独的颜色。当表格超过 10 列时,我找到了多种颜色填充的解决方案。

我将 grid.gedit(...) 错误地输入到 grid.edit(...),然后表格被正确填充。

我不知道为什么,但至少它有效。

如果您知道为什么会这样,请分享您的答案。

于 2012-08-15T17:26:58.270 回答
0

我取了这个页面tableGrob2上的代码并将 ...ii,jj... 的两个实例更改为 ...ii, ".", jj... 作为一种清楚地分隔行和列的方式。当行数超过 10 行时,这似乎可以解决问题。

于 2013-08-27T14:58:54.657 回答