将 tableGrob 中的 colhead 向左对齐而不剪切 colnames

Align colhead in tableGrob to the left without clipping the colnames

我想创建一个 tableGrob 并且我需要一些高级格式,例如旋转它的 colhead(90 度)。不幸的是,格式给我留下了类似于这个问题的剪辑名称:Incorrect left align using tableGrob

正如您在下面的示例中看到的那样,裁剪发生时 colnames 没有左对齐,这意味着考虑到旋转直接在第一行。将旋转角度设置为0时也会出现此问题。

library(gridExtra)
x <- head(iris)

grid_table <- tableGrob(x, rows=NULL, cols= colnames(x),
                    theme=ttheme_minimal(
                      base_size=font_size,
                      padding = unit(c(1.5,1.5), "mm"),
                      core=list(fg_params=list(x=0, hjust=0, fontface=1)),
                      col.just="left",
                      colhead=list(fg_params=list(x=0.3, hjust=0.3,
                                                  fontface=2, rot=90))))

grid.arrange(grid_table)

我尝试按照上述问题中的建议覆盖 textii 函数,但我只遇到以下错误:Error in bindingIsLocked(x, ns) : no binding for "textii"。我正在使用 gridExtra 2.3 版。

关于如何将 colhead 与第一行对齐以及如何避免剪裁效果有什么建议吗?

提前致谢!

编辑: 如下覆盖textii时出现错误:

textii <- function(d, gp=gpar(), name="row-label-",
                   just="center", parse=TRUE){
    x <- switch(just, "center"=0.5, "right"=1, "left"=0)
    parseglobal <- parse
    function(ii, parse=parseglobal){
        lab <- if(parse) parse(text=d[ii]) else d[ii]
        textGrob(x=x, label=lab, just=just, gp=gp, name=paste(name, ii, sep=""))
    }
}

assignInNamespace("textii", textii, "gridExtra")

我不清楚你寻求的对齐方式,但这里有三个用于旋转标签垂直对齐的选项,

library(gridExtra)
x <- head(iris)

g1 <- tableGrob(x, rows=NULL, cols= colnames(x),
                        theme=ttheme_minimal(
                          base_size=12,
                          padding = unit(c(1.5,1.5), "mm"),
                          core=list(fg_params=list(x=0, hjust=0, fontface=1)),
                          colhead=list(fg_params=list(hjust=0, y=0, 
                                                      fontface=2, rot=90))))


g2 <- tableGrob(x, rows=NULL, cols= colnames(x),
                theme=ttheme_minimal(
                  base_size=12,
                  padding = unit(c(1.5,1.5), "mm"),
                  core=list(fg_params=list(x=0, hjust=0, fontface=1)),
                  colhead=list(fg_params=list(hjust=0.5, y=0.5, 
                                              fontface=2, rot=90))))


g3 <- tableGrob(x, rows=NULL, cols= colnames(x),
                theme=ttheme_minimal(
                  base_size=12,
                  padding = unit(c(1.5,1.5), "mm"),
                  core=list(fg_params=list(x=0, hjust=0, fontface=1)),
                  colhead=list(fg_params=list(hjust=1, y=1, 
                                              fontface=2, rot=90))))

grid.arrange(g1,g2,g3,nrow=1)