R tableGrob 更改行的格式
R tableGrob change format of row
我有一些相对简单的代码来创建 table 以打印成 PDF:
library(gridExtra)
df <- head(iris)
tableGrob(df, gp = gpar(fontsize = 8), rows = NULL)
我想让最后一行的格式与 header 行的格式相同(粗体和深灰色背景)。我知道我可以使用 gpar 来控制整个 table 的格式,但不确定如何只影响最后一行。
谢谢!
一个选择是创建一个新的 table,并将两者合并在一起,
g1 <- tableGrob(iris[1:4, 1:3], rows=NULL)
g2 <- tableGrob(iris[1, 1:3], rows=NULL, # can't have empty content
cols=as.character(iris[4, 1:3])) # use 4th row as header
grid.newpage()
g <- rbind(g1[-nrow(g1), ], g2[1,])
grid.draw(g)
我刚刚记得格式化参数会被回收(但只有在版本 >=2.2.0 之后才具有合理的逻辑),所以你可以这样做,
library(gridExtra)
library(grid)
t1 <- ttheme_default(core=list(
fg_params=list(fontface=c(rep("plain", 4), "bold.italic")),
bg_params = list(fill=c(rep(c("grey95", "grey90"),
length.out=4), "#6BAED6"))
))
grid.newpage()
grid.table(iris[1:5, 1:3], theme=t1)
您可以按照 the vignette
中的建议编辑 grob
library(gridExtra)
g <- tableGrob(iris[1:4, 1:3])
edit_cell <- function(table, row, col, name="core-fg", ...){
l <- table$layout
ids <- which(l$t %in% row & l$l %in% col & l$name==name)
for (id in ids){
newgrob <- editGrob(table$grobs[id][[1]], ...)
table$grobs[id][[1]] <- newgrob
}
table
}
g <- edit_cell(g, nrow(g), seq_len(ncol(g)), "core-fg",
gp=gpar(fontsize=15, fontface="bold"))
g <- edit_cell(g, nrow(g), seq_len(ncol(g)), "core-bg",
gp=gpar(fill="darkolivegreen1",
col = "darkolivegreen4", lwd=5))
grid.newpage()
grid.draw(g)
我有一些相对简单的代码来创建 table 以打印成 PDF:
library(gridExtra)
df <- head(iris)
tableGrob(df, gp = gpar(fontsize = 8), rows = NULL)
我想让最后一行的格式与 header 行的格式相同(粗体和深灰色背景)。我知道我可以使用 gpar 来控制整个 table 的格式,但不确定如何只影响最后一行。
谢谢!
一个选择是创建一个新的 table,并将两者合并在一起,
g1 <- tableGrob(iris[1:4, 1:3], rows=NULL)
g2 <- tableGrob(iris[1, 1:3], rows=NULL, # can't have empty content
cols=as.character(iris[4, 1:3])) # use 4th row as header
grid.newpage()
g <- rbind(g1[-nrow(g1), ], g2[1,])
grid.draw(g)
我刚刚记得格式化参数会被回收(但只有在版本 >=2.2.0 之后才具有合理的逻辑),所以你可以这样做,
library(gridExtra)
library(grid)
t1 <- ttheme_default(core=list(
fg_params=list(fontface=c(rep("plain", 4), "bold.italic")),
bg_params = list(fill=c(rep(c("grey95", "grey90"),
length.out=4), "#6BAED6"))
))
grid.newpage()
grid.table(iris[1:5, 1:3], theme=t1)
您可以按照 the vignette
中的建议编辑 groblibrary(gridExtra)
g <- tableGrob(iris[1:4, 1:3])
edit_cell <- function(table, row, col, name="core-fg", ...){
l <- table$layout
ids <- which(l$t %in% row & l$l %in% col & l$name==name)
for (id in ids){
newgrob <- editGrob(table$grobs[id][[1]], ...)
table$grobs[id][[1]] <- newgrob
}
table
}
g <- edit_cell(g, nrow(g), seq_len(ncol(g)), "core-fg",
gp=gpar(fontsize=15, fontface="bold"))
g <- edit_cell(g, nrow(g), seq_len(ncol(g)), "core-bg",
gp=gpar(fill="darkolivegreen1",
col = "darkolivegreen4", lwd=5))
grid.newpage()
grid.draw(g)