我有一个绘图,我想向其中添加一个文本框。此文本框的文本必须位于 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" * ")")))
不确定这是否合适,但您可以通过调用
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)