【问题标题】:Row names in tableGrob are cut off when using row.just = "left使用 row.just = "left 时 tableGrob 中的行名被截断
【发布时间】:2015-08-27 23:38:09
【问题描述】:

谁能解决我为什么会出现行名截断?它与字符串换行的长度无关。指定 row.just = "center" 不会切断行名。

x <- data.frame(row.names=paste("Very very name goes in here somewhere yep it is a looooonnngggg name! phew that was a long name",1:10))

# string wrap long names    
rownames(x) <- sapply(lapply(rownames(x), strwrap, width=40), paste, collapse="\n")

# data frame    
x[,1] <- 1:10
x[,2] <- sample(1:100,10)
x[,3] <- sample(LETTERS[1:26],10)
colnames(x) <- c("Value 1", "Value 2", "Label")

# create table
main_table <- tableGrob(x,cols = colnames(x), show.colnames = TRUE, row.just = "left")

# display table (is there another way to display?
grid.arrange(main_table)

给我这个(对缩放感到抱歉)

而指定“中心”给了我这个

main_table <- tableGrob(x,cols = colnames(x), show.colnames = TRUE, row.just = "center")
grid.arrange(main_table)

有什么想法吗?

附言我不确定为什么图像会这样,当我在绘图窗口中单击“缩放”时,它们是完整的表格,但保存/导出只会保存放大版本...

【问题讨论】:

    标签: r rowname grob


    【解决方案1】:

    我猜这是因为可用宽度是根据字符串宽度计算得出的,但对齐会将文本向右移动。 hjust/x 交互总是让我在网格中感到困惑。你可以“修复”它,

    textii <- function(d, gp=gpar(), name="row-label-",
                       just="center", parse=TRUE){
      x <- switch(just, "center"=0.5, "right"=1, "left"=0)
      parseglobal <- parse
      ##   allow the correct space to fit well in a rectangle
      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")
    

    但恐怕这不是一个很好的解决方案。

    【讨论】:

    • 嗨,伙计,我在周末短暂浏览后才回到这个问题。您能否在我的初始代码中解释如何/在何处实施您的解决方案?抱歉,我是新手,对我来说并不明显。
    • 问题是 gridExtra 包的内部问题,因此要修复它,您可以编辑包源并重新安装它,或者作为一次性解决方法,只需将上述代码复制并粘贴到您的R 控制台。在会话期间,它将用这个新函数替换 textii 函数的内部定义。
    猜你喜欢
    • 2014-07-05
    • 1970-01-01
    • 2017-04-08
    • 1970-01-01
    • 2012-12-16
    • 2019-05-20
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    相关资源
    最近更新 更多