Sta*_*ian 6 plot expression r legend plotmath
这是这个问题的后续问题: 如何在`bquote`表达式中使用`text`?
但现在我把它放在一个传奇中,这似乎改变了事情.
我尝试了以下方法:
test<-c(10:1)
dummy1<-0.004323423
dummy2<-0.054
dummy3<-0.032
plot(test,c(1:10))
legend("topright",
legend=c(bquote(Qua_0,99^normal == .(round(dummy1,4))),bquote(Qua_0,95^normal == .(round(dummy2,4))),bquote(Qua_0,99^t == .(round(dummy3,4)))),
bty = "n",lwd=2, cex=1, col=c("red","black","darkgreen"), lty=c(1,3,5))
Run Code Online (Sandbox Code Playgroud)
所以,我想拥有
表达式正确,因此正确写入了索引0,95以及幂^ correclty
等号后的换行符
彩色文字,与lign相同,所以第一个是红色的
我试图实现现有帖子的答案,但我没有想出来,顶部也没有用.
首先创建3个表达式的向量,并用于substitute创建适当的虚拟值.请注意,我正在使用as.expression它们,以便不立即评估它们,并使用atop换行符.然后在调用时使用该向量legend:
v <- c(
as.expression(substitute(atop(Qua[0.99]^normal == "", dummy), list(dummy=round(dummy1,4)))),
as.expression(substitute(atop(Qua[0.95]^normal == "", dummy), list(dummy=round(dummy2,4)))),
as.expression(substitute(atop(Qua[0.99]^t == "", dummy), list(dummy=round(dummy3,4))))
)
cols <- c("red","black","darkgreen")
legend("topright", legend=v, bty = "n",lwd=2, cex=1, col=cols, text.col=cols, lty=c(1,3,5))
Run Code Online (Sandbox Code Playgroud)
文本的颜色设置为text.col.

如果你想坚持使用bquote而不是substitute:
v <- c(
as.expression(bquote(atop(Qua[0.99]^normal == "", .(round(dummy1,4))))),
as.expression(bquote(atop(Qua[0.95]^normal == "", .(round(dummy2,4))))),
as.expression(bquote(atop(Qua[0.99]^t == "", .(round(dummy3,4)))))
)
Run Code Online (Sandbox Code Playgroud)
要使法线和0.99加粗,可以bold在表达式中使用:
v <- c(
as.expression(substitute(atop(Qua[bold(0.99)]^bold(normal) == "", dummy), list(dummy=round(dummy1,4)))),
as.expression(substitute(atop(Qua[bold(0.95)]^bold(normal) == "", dummy), list(dummy=round(dummy2,4)))),
as.expression(substitute(atop(Qua[bold(0.99)]^bold(t) == "", dummy), list(dummy=round(dummy3,4))))
)
Run Code Online (Sandbox Code Playgroud)
但实际上0.99不会很大胆:

您可以尝试使用正常大小的文本textstyle:
v <- c(
as.expression(substitute(atop(Qua[textstyle(0.99)]^textstyle(normal) == "", dummy), list(dummy=round(dummy1,4)))),
as.expression(substitute(atop(Qua[textstyle(0.95)]^textstyle(normal) == "", dummy), list(dummy=round(dummy2,4)))),
as.expression(substitute(atop(Qua[textstyle(0.99)]^textstyle(t) == "", dummy), list(dummy=round(dummy3,4))))
)
Run Code Online (Sandbox Code Playgroud)
得到这个:

这里需要做几件事,但主要的是以合适的格式获得3个表达式 - 简单地将c它们放在一起是行不通的.为此我创建了一个表达式列表,然后创建了该列表上sapply的as.expression函数以获得"表达式向量".
我使用plotmath函数atop来获得"linebreak"; 这把它的论点放在另一个之上.
为了获得0,95我认为只是0.95在您的语言环境中的部分,在我的机器上,我必须使用*带有文字的布局函数","来并置0和95.如果这只是写小数,那么在其他.用作小数分隔符的语言环境中,这不是必需的.我怀疑在您的语言环境中,您可以使用下面的第二个版本,但写作[0,99]而不是[0.99],但我不知道.
如果你刚才
bquote(atop(foo_0.99^normal ==, .round(bar, 4)))
Run Code Online (Sandbox Code Playgroud)
你只是得到一个错误:
> bquote(atop(foo_0.99^normal ==, .round(bar, 4)))
Error: unexpected ',' in "bquote(atop(foo_0.99^normal ==,"
Run Code Online (Sandbox Code Playgroud)
这是因为==缺少函数/运算符的右侧.因为你不想要任何东西==(在当前行上!),你需要使用一些不会增加额外空间但提供有效右侧的东西==.在这里我使用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)
Run Code Online (Sandbox Code Playgroud)
看起来你正在使用LaTeX _来获取上标.在情节中你需要[ ].您还会注意到,这在排版上并不是那么好 - 图例条目之间没有足够的空间,但是单个条目中的元素之间有一些空间.这是因为我们滥用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)
Run Code Online (Sandbox Code Playgroud)
这会产生:
