如何在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
我正在对数据集执行一项相当复杂且较长的统计分析,其中一个最终输出是 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