在 R 绘图中将带有上标的文本居中于多行中

问题描述 投票:0回答:1

我有一个绘图,我想向其中添加一个文本框。此文本框的文本必须位于 5 个不同的行上。该文本框还包含上标。文本框也应该居中对齐。我知道这里这里的帖子,但我的问题略有不同(请继续阅读)。

我尝试了三种不同的解决方案(检查下图)。每一种都有其自身的缺点。第一个图(使用

atop
函数)不会产生每行大小相同的文本,因为行数 (5) 不是 2 的幂。第二个图(使用
expression
paste
函数)没有居中对齐,并且最后一行有很大的间隙。第三个图(使用多个
text
函数)的缺点是每行之间没有适当的间距。

我的问题与最后一个图有关,其中行之间的间距稍微偏离。默认情况下,使用

atop
"\n"
时,行间距是多少?我想使用我想出的第三种解决方案,但我想确保间距与默认间距没有任何不同。

layout(matrix(c(1, 1, 2, 2, 0, 3, 3, 0), byrow = T, nrow = 2))
plot(0, type = 'n', main = "Plot 1")
text(1, 0, bquote(atop(atop("Total", "Number of"), atop("Observed", atop("Interactions", "(n * m" ^ "-2" * " * wk" ^ "-1" * ")")))))
plot(0, type = 'n', main = "Plot 2")
text(1, 0, expression(paste("Total\nNumber of\nObserved\nInteractions\n(n * m" ^ "-2" * " * wk" ^ "-1" * ")")))
plot(0, type = 'n', main = "Plot 3")
text(1, 0.4, "Total")
text(1, 0.3, "Number of")
text(1, 0.2, "Observed")
text(1, 0.1, "Interactions")
text(1, 0, expression(paste("(n * m" ^ "-2" * " * wk" ^ "-1" * ")")))

Example Figure

r plot textbox
1个回答
0
投票

不确定这是否合适,但您可以通过调用

strheight
找到标准间距。这可以简化,但作为概念证明,它似乎有效:

plot(0, type = 'n', main = "Plot 2")
shtxt <- strheight("a")
shgap <- strheight("a\nb") - shtxt * 2
y <- 0
exprs <- list(
    expression("Total"),
    expression("Number of"),
    expression("Observed"),
    expression("Interactions"),
    expression((n %*% m ^ -2 %*% wk ^ -1))
)
Map(\(e,s) text(1, (shtxt + shgap) * -s + y, e), exprs, seq_along(exprs) - 1)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.