这里需要做几件事,但主要是以合适的格式获取 3 个表达式 - 简单地c
将它们组合在一起是行不通的。为此,我创建了一个表达式列表,然后创建了该列表上sapply
的as.expression
函数以获得“表达式向量”。
我使用 plotmath 函数atop
来获得“换行符”;这将其论点置于另一个之上。
为了获得0,95
我认为只是0.95
在您的语言环境中的部分,在我的机器上,我必须使用*
带有文字的布局函数","
来0
将95
. 如果这只是为了写一个小数,那么在其他.
用作小数分隔符的语言环境中,这不是必需的。我怀疑在您的语言环境中,您可以使用下面的第二个版本,但写作[0,99]
而不是[0.99]
,但我不知道。
如果你只是把
bquote(atop(foo_0.99^normal ==, .round(bar, 4)))
你只会得到一个错误:
> bquote(atop(foo_0.99^normal ==, .round(bar, 4)))
Error: unexpected ',' in "bquote(atop(foo_0.99^normal ==,"
==
这是因为缺少函数/运算符的右侧。由于您在==
(在当前行!)之后不需要任何内容,因此您需要使用不会增加额外空间但为==
. 在这里,我使用phantom()
which 作为占位符但不留空间(因为我不提供任何参数)。但你也可以用,== ""
代替""
.phantom()
要获得与线条颜色相同的文本,请使用text.col
参数。
这是满足您所有要求的完整内容(经过一段时间):
test <- 10:1
dummy1 <- 0.004323423
dummy2 <- 0.054
dummy3 <- 0.032
plot(test, 1:10)
## list of expressions
exprs <-
list(bquote(atop(Qua_0 * "," * 99^normal == phantom(), .(round(dummy1, 4)))),
bquote(atop(Qua_0 * "," * 95^normal == phantom(), .(round(dummy2, 4)))),
bquote(atop(Qua_0 * "," * 99^t == phantom(), .(round(dummy3, 4)))))
## fudge to get them as an expression vector
exprs <- sapply(exprs, as.expression)
cols <- c("red", "black", "darkgreen")
legend("topright", legend = exprs, bty = "n", lwd = 2, cex = 1, col = cols,
lty=c(1,3,5), text.col = cols)
看起来您正在使用 LaTeX_
来获取上标。在 plotmath 你需要[ ]
. 您还会注意到,这在排版上不太好——图例条目之间没有足够的空间,但单个条目中的元素之间有一些空间。这是因为我们滥用atop
伪造换行符。我们可以使用 的y.intersp
参数来处理legend
。增加它以2
提供足够的空间。
结合这一点,我将执行以下操作来满足您的所有要求:
plot(test, 1:10)
## list of expressions
exprs <-
list(bquote(atop(Qua[0.99]^normal == phantom(), .(round(dummy1, 4)))),
bquote(atop(Qua[0.95]^normal == phantom(), .(round(dummy2, 4)))),
bquote(atop(Qua[0.99]^t == phantom(), .(round(dummy3, 4)))))
## fudge to get them as an expression vector
exprs <- sapply(exprs, as.expression)
cols <- c("red", "black", "darkgreen")
legend("topright", legend = exprs, bty = "n", lwd = 2, cex = 1, col = cols,
lty=c(1,3,5), text.col = cols, y.intersp = 2)
这会产生: