如何在R中将文本包装在一个矩形中

How to wrap text in a rectangle in R

我正在对数据集执行一项相当复杂且较长的统计分析,其中一个最终输出是 8 个带有居中标签的彩色方块组。颜色和标签都取决于分析结果,其中许多是生成的并且必须定期更新,因此不能选择手动编辑。正方形为 2x2 平方厘米,在某些情况下,标签不适合正方形。如果我用 cex 减小字体大小,文本就会变得太小。

这是一个简单的问题示例(我用的是RStudio):

plot.new()
plot.window(xlim=c(0,5),ylim=c(0,5))
rect(1,1,4,4)
text(2,2,"This is a long text that should fit in the rectangle")

问题是:如何自动将可变长度的字符串放入矩形中,如下所示?

plot.new()
plot.window(xlim=c(0,5),ylim=c(0,5)) # Window covers whole plot space
rect(1,1,4,4)
text(2.5,3,"This is a long text")
text(2.5,2.5,"that should fit")
text(2.5,2,"in the rectangle")

在要分隔的地方使用 return 转义字符。请看下面的代码并解读。

plot.new()
plot.window(xlim=c(0,5),ylim=c(0,5))
rect(0,0,4,4)
text(2,2,"This is a long text\nthat should fit\nin the rectangle")

希望对您有所帮助。 :)

结合 strwidth 以获得图上的实际宽度,并结合 strwrap 来换行文本。它并不完美(文本应按像素宽度而不是字符数换行),但在大多数情况下应该如此。

plot.new()
plot.window(c(-1,1), c(-1,1))

rectangleWidth <- .6
s <- "This is a long text that should fit in the rectangle"

n <- nchar(s)
for(i in n:1) {
    wrappeds <- paste0(strwrap(s, i), collapse = "\n")
    if(strwidth(wrappeds) < rectangleWidth) break
}

textHeight <- strheight(wrappeds)       

text(0,0, wrappeds)
rect(-rectangleWidth/2, -textHeight/2, rectangleWidth/2, textHeight/2) # would look better with a margin added