这里有几件事情需要做,但主要是让这 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() 作为占位符但不留空间(因为我没有提供任何参数)。但您也可以使用== "",将"" 替换为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 来伪造换行符。我们可以使用legend 的y.intersp 参数来处理这个问题。将其增加到 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)
这会产生: