在绘图标题中使用斜体希腊字母/类TeX数学符号

5
我想在R中的图表标题中创建类似latex样式的数学公式。 plotmath工具 提供了一些有用但有限的表达式,使用非latex语法和样式。
例如,我想在图表标题中打印方程$\mathrm{d} \mathbf{x} = a [\theta - \mathbf{x}] \mathrm{d} t$,并仍能评估某些变量的值。我所拥有的最佳解决方案是非常繁琐的:
lambda <- 4
plot(1:10,1:10)

mtext(bquote(paste(d*bolditalic(x)[italic(t)] == alpha*(theta - bolditalic(x)[italic(t)] )*d*italic(t) +  .(lambda) * d * italic(B)[italic(t)] )), line=2.25,cex=2) 

或者

require(ggplot2)
qplot(1:10, 1:10) + opts(title=bquote(paste(d*bolditalic(x)[italic(t)] == alpha*(theta - bolditalic(x)[italic(t)] )*d*italic(t) +  .(lambda) * d * italic(B)[italic(t)] )), line=2.25,cex=2)
这个问题几乎解决了这个问题,但我失去了bquote显示变量数值(例如我的示例中的lambda)的能力。是否有一种方法可以结合这些内容,使我可以拥有斜体希腊字母(作为变量的标准格式,例如tex所做的那样),并在特定值处进行求值?
有没有更好的方法,我可以简单地编写方程的tex语法,并将它们添加到我的图形中?

我还想像我的LaTeX样式方程式那样显示正方形,而不是括号,但是也不知道如何做。 - cboettig
你可以使用这个CRAN包将LaTeX转换为plotmath:https://github.com/stefano-meschiari/latex2exp - Stefano Meschiari
2个回答

13
您可能想要查看tikzDevice包(或先看一下它的vignette),它提供了一种自然的方式在R图形中编写LaTeX数学公式。
我还有一个简单的例子
这里是另一个例子:
library(tikzDevice)
library(ggplot2)
tikz('math.tex', standAlone = TRUE, width = 4, height = 4)
qplot(1:10, 1:10, 
  main = '$\\mathrm{d} \\mathbf{x} = a [\\theta - \\mathbf{x}] \\mathrm{d} t$')
dev.off()

如果您运行pdflatex math.tex,将会产生以下结果:

ggplot2中的LaTeX数学公式


我看了那个例子,觉得很酷,但是我尝试将它应用到这个例子上失败了。 - IRTFM
1
我稍微编辑了一下答案。你可以自己尝试不同的数学表达式。你只需要给tikzDevice一个纯文本字符串,所以如果你想让你的lambda是一个数字,你可以使用这样的代码:sprintf('\\alpha + %s + \\beta', 1.234);不需要使用bquote()substitute()expression()等技巧。 - Yihui Xie
我猜这说明了我们的TeX设置不同。我从TeXworks处理器(就像之前一样)收到了这个错误消息:This is pdfTeX,Version 3.1415926-1.40.10(TeX Live 2009) 进入扩展模式 (./math.tex !未定义的控制序列。 l.3 \documentclass [10pt]{article} ? - IRTFM
是的。 pdflatex 生成了上面所看到的图。 - IRTFM
谢谢,这正是我正在寻找的!很高兴注意到sprintf解决方案与tikzDevice可以使用变量值一起工作,就像bquote/substitute一样(也许这是显而易见的)。 - cboettig
我已经将这个例子放在我正在开发的新软件包的手册中:https://github.com/downloads/yihui/knitr/knitr-manual.pdf - Yihui Xie

4

你应该编辑你的问题而不是放置子评论(我会尝试解决这个框的问题)。我有时发现bquote只能深入到一定程度,需要使用substitute。这样做可以解决问题:

 lambda <- 4
 plot(1:10,1:10)

mtext(substitute(paste(d*bolditalic(x)[italic(t)] == 
                       alpha*group("[", (theta - bolditalic(x)[italic(t)] )*d*italic(t) + 
                        lambda, "]") * d * italic(B)[italic(t)] ), list(lambda=lambda)), 
      line=2.25,cex=2)

它也适用于 ggplot,标题位置看起来更好:
 qplot(1:10, 1:10) + opts(title=substitute(paste(d*bolditalic(x)[italic(t)] == 
                        alpha*(theta - bolditalic(x)[italic(t)] )*d*italic(t) + 
                         lambda * d * italic(B)[italic(t)] ), list(lambda=lambda)), 
                       line=2.25,cex=2)

enter image description here

“d” 至少在我参考了一组在线Latex示例之后理解为“正方形”的意思。请保留HTML标签,不要添加解释。

http://www.personal.ceu.hu/tex/cookbook.html

我以为你需要http://en.wikipedia.org/wiki/D%27Alembert_operator,但是我还没有找到。


1
我认为OP想要使用方括号而不是圆括号。为此,您可以使用“group”函数,例如:group("[", list(theta, bolditalic(x)[italic(t)] ), "]")(从demo(plotmath)的第4或第5页中找到)。 - Josh O'Brien
让我们看看。我会理解“方括号”这个术语。 - IRTFM
1
同意。这里我唯一能依据的线索是“不使用括号”,(而且我可能对所要求的内容理解错误)。 - Josh O'Brien
1
非常抱歉我的问题没有表述清楚 - 我需要在主标题中使用斜体希腊字母以及方括号,并且最好使用LaTeX风格的输入方式,这比手动添加斜体命令更加简洁,而且通常比plotmath选项更加灵活。所选答案完美地满足了这些要求。 - cboettig

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