R中的grid.table()条件格式

时间:2012-08-03 15:14:04

标签: r


我正在查看此link,它会生成网格表并进行文本格式化。有什么方法可以做条件格式化吗? 对于例如

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

  4. 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"))
    

    如何避免这种情况?

5 个答案:

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

答案 1 :(得分:1)

我认为@baptiste可能已经交换了行和列。在这里,我设置第二行,第一列等于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"))

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

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

答案 3 :(得分:0)

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

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

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

如果您知道原因,请分享您的答案。

答案 4 :(得分:0)

我在这个页面tableGrob2上获取了代码,并将...... ii,jj ...的两个实例更改为... ii,“。”,jj ...作为一种明确分离的方式行和列。当有超过10行时,这似乎解决了这个问题。