2016-02-05 69 views
0

我正在嘗試將長文本添加到圖中。目標是包裝文本,以便每條線的長度相等。我看了幾個功能:strwrap,format,text。但是,這些似乎都沒有讓生產線平等的選擇。R:將長文本換行以便每一行具有相同的長度

我想象的解決方案應該在短行之間添加空格以彌補缺少的字符。也許有一個我錯過的功能/論據?

下面是我目前的包裝(不相等的長度):

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

+2

相關 - http://stackoverflow.com/questions/34710597/justify-text-in-r – thelatemail

+1

@thelatemail需要par(family ='mono')'正確嗎? – rawr

+0

@rawr - 可能,是的。這樣做沒有monospacing是另一個複雜的世界。 – thelatemail

回答

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

+2

你也可以將文字傳給家人,所以它不會改變劇情文本的其餘部分 – rawr

+0

謝謝!這是一個很好的評論。 –

相關問題