R:换长文本,使每行具有相同的长度

时间:2016-02-05 00:57:59

标签: r text plot word-wrap

我正在尝试为情节添加长文字。目标是包装文本,使每行的长度相等。我浏览了几个函数:strwrapformattext。但这些似乎没有一个选项可以使线条相等。

我想解决方案应该在较短的行中的单词之间添加空格以弥补缺少的字符。也许我错过了一个函数/参数?

以下是我目前的包装(不等长):

txt <- paste(sample(LETTERS, 1000, replace=TRUE), collapse="")
txt <- strsplit(txt, "A|I|O|E|U")
txt <- paste(txt[[1]], collapse=" ")

plot(NA, xlim=c(0,1), ylim=c(0,1))
text(0.0, 0.5, paste(strwrap(txt, width=50), collapse="\n"), pos=4, cex=0.7)

textplot

1 个答案:

答案 0 :(得分:2)

这是一个实现它的黑客。

1)定义一个函数,通过在单词之间添加空格将字符串扩展到所需的长度。

expandWidth <- function(str, width) {
  nmiss <- max(0, width-nchar(str))
  words <- unlist(strsplit(str, " "))
  ngaps <- length(words)-1
  addToAll   <- nmiss %/% ngaps
  addToStart <- nmiss %% ngaps
  nSpaces    <- rep(addToAll, ngaps)
  nSpaces[0:addToStart] <- nSpaces[0:addToStart] + 1
  spaces <- sapply(Map(rep, " ", nSpaces+1), paste, collapse="")
  paste(apply(rbind(c("", spaces), words), 2, paste, collapse=""), collapse="")
}

2)处理文字。

txt <- paste(sample(LETTERS, 1000, replace=TRUE), collapse="")
txt <- strsplit(txt, "A|I|O|E|U")
txt <- paste(txt[[1]], collapse=" ")

# Add spaces
txt <- sapply(strwrap(txt, width=50), expandWidth, 50)

3)使用字体大小相等的字体(如@rawr所述)

plot(NA, xlim=c(0,1), ylim=c(0,1))
text(0.0, 0.5, paste(txt, collapse="\n"), pos=4, cex=0.7, family="mono")

结果:

resultPic