如何为R中的tableGrob自定义特定列?

时间:2016-04-06 14:23:33

标签: r dataframe gridextra

我希望自定义tableGrob中的特定列,对于这个可重复的示例,我选择了查看自定义理由。

假设您有以下数据框:

df <- data.frame(Order = c(1:3), Name = c("Adam", "Ben", "Charlie"), Score = c(4, 8, 9))

并且您希望使用包gridExtra来呈现表格:

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)

但是,这会调整所有列的对齐方式。假设我只想离开订单栏的合理性,并将其他人留在他们的中心理由位置,我该怎么做?

我已经尝试过:

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)

但这似乎只是按行定制。如何调整此代码以按列自定义?

1 个答案:

答案 0 :(得分:5)

它有点繁琐,但你可以指定所有元素的参数,

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默认为列方式,因为大多数情况下表格都有交替颜色的行。应该可以对水平对齐参数进行特殊处理,以使其更加用户友好。随意提交PR。

enter image description here