【问题标题】:Wrapping text in a table using tableGrob in gridExtra使用 gridExtra 中的 tableGrob 在表格中包装文本
【发布时间】:2015-09-09 13:48:14
【问题描述】:

我有一系列调查问题,并且正在报告学校、学校大家庭和整个董事会的回答。有些问题很长 - 我想做的是让文本在列结束时自动换行。现在我必须手动添加换行符。这甚至可能吗?我正在使用 R 版本 3.2.1 和 gridExtra_2.0.0。

一些代码:

library(gridExtra)
library(grid)
library(ggplot2)

key <- c("I feel close to other parents with children the same age", "I am comfortable asking for advice about parenting", "I take time out to take care of my own health and well−being")
SCH <- c(20,30,40)
FOS <- c(25,35,56)
BOARD <- c(32,44,58)

d <- data.frame(key, SCH, FOS, BOARD)

row.names(d) <- d[,1]
d[,1] <- NULL

g <- tableGrob(d)

g$widths <- unit (c(0.4, 0.1,0.1,0.1),"npc")
grid.newpage()
grid.draw(g)

【问题讨论】:

    标签: r gridextra


    【解决方案1】:

    您可以通过strwrap 实现这一目标

    key <- c("I feel close to other parents with children the same age", "I am comfortable asking for advice about parenting", "I take time out to take care of my own health and well−being")
    
    key_wraped <- strwrap(key, width = 30, simplify = FALSE) # modify 30 to your needs
    key_new <- sapply(key_wraped, paste, collapse = "\n")
    
    d <- data.frame(key_new, SCH, FOS, BOARD)
    

    对我来说,这会导致:

    【讨论】:

    • 就是这样 - 太棒了! @Floo0
    【解决方案2】:

    另一个选项是 Paul Murrell 的“splitString”函数:

    splitString <- function(text) {
     strings <- strsplit(text, " ")[[1]]
     newstring <- strings[1]
     linewidth <- stringWidth(newstring)
     gapwidth <- stringWidth(" ")
     availwidth <-
         convertWidth(unit(1, "npc"),
                        "inches", valueOnly=TRUE)
     for (i in 2:length(strings)) {
         width <- stringWidth(strings[i])
         if (convertWidth(linewidth + gapwidth + width,
                            "inches", valueOnly=TRUE) <
                availwidth) {
             sep <- " "
             linewidth <- linewidth + gapwidth + width
             } else {
                 sep <- "\n"
                 linewidth <- width
                 }
        newstring <- paste(newstring, strings[i], sep=sep)
         }
     newstring
    }
    
    library(grid)
    pushViewport(viewport())
    
    grid.text(splitString("There was once a very long string that had to take up the entire viewport and then some but luckily there was also a function called 'splitString'"))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-08
      • 2013-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多