如何在 R 中为 tableGrob 自定义特定列?
How do I customize particular columns for a tableGrob in R?
我希望自定义我的 tableGrob 中的特定列,对于这个可重现的示例,我选择查看自定义理由。
假设您有以下数据框:
df <- data.frame(Order = c(1:3), Name = c("Adam", "Ben", "Charlie"), Score = c(4, 8, 9))
并且您想使用包 gridExtra
来呈现 table:
dfGrob <- tableGrob(df, rows = NULL)
grid.arrange(dfGrob)
您可以通过调整用于构建 grob 的主题来调整列的对齐方式,例如:
tt1 <- ttheme_default(core=list(fg_params=list(hjust= 0, x=0.05)),
colhead=list(fg_params=list(hjust=0, x=0.1)))
dfGrob <- tableGrob(df, rows = NULL, theme = tt1)
grid.arrange(dfGrob)
但是,这会调整所有列的对齐方式。假设我只想左对齐 Order Column,而让其他列处于居中对齐位置,我该怎么做?
我试验过:
tt1 <- ttheme_default(core=list(fg_params=list(hjust= c(0, 0.5, 0.5), x=c(0.15, 0.5, 0.5))),
colhead=list(fg_params=list(hjust=1, x=0.95)))
dfGrob <- tableGrob(df, rows = NULL, theme = tt1)
grid.arrange(dfGrob)
但这似乎只是按行自定义。如何调整此代码以改为按列自定义?
有点繁琐,但您可以为所有元素指定参数,
library(grid)
library(gridExtra)
df <- data.frame(Order = c(1:3),
Name = c("Adam", "Ben", "Charlie"),
Score = c(4, 8, 9))
hj <- matrix(c(0, 0.5, 1), ncol=3, nrow=nrow(df), byrow=TRUE)
x <- matrix(c(0, 0.5, 1), ncol=3, nrow=nrow(df), byrow=TRUE)
tt1 <- ttheme_default(core=list(fg_params=list(hjust = as.vector(hj),
x = as.vector(x))),
colhead=list(fg_params=list(hjust=1, x=0.95)))
dfGrob <- tableGrob(df, rows = NULL, theme = tt1)
grid.newpage()
grid.draw(dfGrob)
recycling logic 默认为按列显示,因为通常 table 具有多行交替颜色。应该可以对水平对齐参数进行特殊处理,使其更加用户友好。欢迎提交 PR。
我希望自定义我的 tableGrob 中的特定列,对于这个可重现的示例,我选择查看自定义理由。
假设您有以下数据框:
df <- data.frame(Order = c(1:3), Name = c("Adam", "Ben", "Charlie"), Score = c(4, 8, 9))
并且您想使用包 gridExtra
来呈现 table:
dfGrob <- tableGrob(df, rows = NULL)
grid.arrange(dfGrob)
您可以通过调整用于构建 grob 的主题来调整列的对齐方式,例如:
tt1 <- ttheme_default(core=list(fg_params=list(hjust= 0, x=0.05)),
colhead=list(fg_params=list(hjust=0, x=0.1)))
dfGrob <- tableGrob(df, rows = NULL, theme = tt1)
grid.arrange(dfGrob)
但是,这会调整所有列的对齐方式。假设我只想左对齐 Order Column,而让其他列处于居中对齐位置,我该怎么做?
我试验过:
tt1 <- ttheme_default(core=list(fg_params=list(hjust= c(0, 0.5, 0.5), x=c(0.15, 0.5, 0.5))),
colhead=list(fg_params=list(hjust=1, x=0.95)))
dfGrob <- tableGrob(df, rows = NULL, theme = tt1)
grid.arrange(dfGrob)
但这似乎只是按行自定义。如何调整此代码以改为按列自定义?
有点繁琐,但您可以为所有元素指定参数,
library(grid)
library(gridExtra)
df <- data.frame(Order = c(1:3),
Name = c("Adam", "Ben", "Charlie"),
Score = c(4, 8, 9))
hj <- matrix(c(0, 0.5, 1), ncol=3, nrow=nrow(df), byrow=TRUE)
x <- matrix(c(0, 0.5, 1), ncol=3, nrow=nrow(df), byrow=TRUE)
tt1 <- ttheme_default(core=list(fg_params=list(hjust = as.vector(hj),
x = as.vector(x))),
colhead=list(fg_params=list(hjust=1, x=0.95)))
dfGrob <- tableGrob(df, rows = NULL, theme = tt1)
grid.newpage()
grid.draw(dfGrob)
recycling logic 默认为按列显示,因为通常 table 具有多行交替颜色。应该可以对水平对齐参数进行特殊处理,使其更加用户友好。欢迎提交 PR。