tableGrob中的行名称在使用row时被截断,just =“left

lymnna71  于 2023-04-03  发布在  其他
关注(0)|答案(1)|浏览(124)

有谁能解释为什么行名称会被截断?它与字符串换行的长度无关。指定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)

有什么想法吗
另外,我不知道为什么图像是这样的,当我在绘图窗口中点击“缩放”时,它们是完整的表格,但保存/导出只保存放大的版本...

ljsrvy3e

ljsrvy3e1#

我猜这是因为可用的宽度是从字符串宽度计算出来的,但是对齐会将文本向右移动。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")

但恐怕这不是个好办法

相关问题