在绘图标题中连接字符串和表达式

29

如何在绘图标题中组合文本和数学表达式。如果使用 paste 函数,则表达式会被转换为字符类型。例如,我想要以下内容作为标题:

$ARL_1$ 曲线对应 $S^2$

谢谢。

3个回答

34

你可以查看?plotmath来了解如何完成这样的事情。以下是一个例子:

plot(1:10, main = expression(ARL[1] ~ "curve for" ~ S^2))

[.]是下标,而^用于上标。~会使表达式中的各个部分间隔开,就像有实际的空格一样。

编辑:通常我会执行以下操作:

plot(1:10, main = expression(ARL[1] ~ curve ~ for ~ S^2))

但是这会导致错误,因为for被解释为开始一个for()循环调用。


如果您使用 expression(ARL[1] ~ curve ~ "for" ~ S^2),那么第二个将会起作用。 - Marek
@Marek:哦,是的,同意。但如果你要做“for”,最好也做“curve for”,除非~和空格是不同数量的空间...? - Gavin Simpson
当然。在需要混合更多字符串的更复杂情况下,这很重要。我将其添加为完整性;另一方面,您也可以使用反引号```。 - Marek

33

您还可以使用bquote(paste(...)),这比expression更灵活: 您可以使用.(x)在标签中包含变量值(例如x的值)。例如:

x<- 232323
plot(1:10, main = bquote(paste(ARL[1], " curve for ", S^2, "; x=",.(x))))

2
是的,虽然我通常发现使用plotmath paste函数会更加混淆而不是有所帮助。请尝试 > x<- 232323
plot(1:10, main = bquote(ARL[1]"曲线为"S^2";"x==.(x)))
- IRTFM
+1 Dwin - 如果你在错误的位置放置了,"",引入paste会让人很痛苦。 - Gavin Simpson
@GavinSimpson,是的,你的答案更好。但我认为指出一个更灵活的解决方案会更好,以防有人在这里寻找更一般的解决方案。 - fabians
+1。那个评论并不是针对你回答的实质性问题(bquote()),只是想指出如果可以避免,就不要在其中引入paste。bquote() 很强大,但使用得不够多。 - Gavin Simpson
1
另外我再+1。我认为bquote是一个很好的建议,并只稍微提出了一点异议,以避免尽可能地粘贴,因为它经常与那个“其他粘贴”混淆。人们没有意识到这是一个具有不同语义且没有sep参数的不同函数。 - IRTFM

4

您还可以使用latex2exp::TeX将TeX即时转换为表达式:

plot(cars, main = TeX("$ARL_1$ curve for $S^2$"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接