我正在查看此link,它会生成网格表并进行文本格式化。有什么方法可以做条件格式化吗? 对于例如
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"))
如何避免这种情况?
答案 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行时,这似乎解决了这个问题。