?plotmath
开始
如果在 R 中的文本绘制函数(text
, mtext
, axis
, legend
) 的 text
参数是一个表达式,那么该参数将被解释为数学表达式,并且输出将按照类似于 TeX 的规则进行格式化。
text
的 labels
参数被记录为:
一个字符向量或表达式,指定要写入的文本。尝试通过 as.character
将其他语言对象(名称和调用)强制转换为表达式,将向量和其他分类对象强制转换为字符向量。
(强调我的). bquote
实际上并不返回一个表达式(R 类,而不是概念),而是一个语言对象(特别是一个调用)。这导致了两个问题:
- 因为 R 无法处理一组调用的向量,
c
实际上并没有创建一个向量,而是将结果强制转换为列表,类似于将 c(sum, mean)
强制转换为列表,以及
- 虽然
text
会将从 bquote
返回的调用本身强制转换为表达式(这将被正确解析),但它将列表强制转换为字符向量,这不会根据 plotmath
进行解释。
您可以使用 as.expression
显式地强制转换由 c
和 bquote
生成的调用列表,但直接调用 expression
并避免使用 bquote
更快:
plot(1, ty ='n', ann = F, xlim = c(-4, 6), ylim = c(-3.5, 1.5))
text(c(-4, 6 ), rep(1, 2), expression(-infinity, infinity))
![带有无限符号的图表](https://istack.dev59.com/wIZH4.webp)
最后提一下,c
函数实际上可以对多个表达式进行操作 - 在某种程度上——因为 c(expression(-infinity), expression(infinity))
返回 expression(-infinity, infinity)
。与具有两个命名参数的 bquote
不同,expression
接受 ...
,所以更容易只调用它一次并放入多个输入。
text()
吗? - user7170429?plotmath
,请使用expression
而不是bquote
:text(c(-4, 6 ), rep(1, 2), c( expression(-infinity), expression(infinity) ) )
。 - alistairetext(c(-4, 6 ), rep(1, 2), c( expression(-infinity ), bquote(infinity ) ) )
成功。给c
的第一项必须是一个真正的 R-expression-classed 项。 - IRTFM