【问题标题】:Italic greek letters / latex-style math in plot titles斜体希腊字母/情节标题中的乳胶风格数学
【发布时间】:2012-01-01 16:04:12
【问题描述】:

我想在 R 中的绘图标题中创建乳胶风格的数学。plotmath tools 有一个有用但有限的表达式子集,它们可以显示,并使用非乳胶语法和风格。

例如,我想在绘图标题中打印方程 $\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)

This question 几乎解决了这个问题,但我失去了 bquote 显示变量数值的能力(在我的示例中为 lambda)。有没有办法将这些组合起来,这样我就可以使用斜体希腊字母(变量的标准格式,例如由 tex 完成)并以特定值进行评估?

有没有更好的方法让我可以简单地为方程编写 tex 语法并将它们添加到我的图表中?

【问题讨论】:

  • 我也想在我的乳胶样式方程中显示正方形,而不是括号,但也看不到如何做到这一点。
  • 您可以使用这个将 LaTeX 转换为 plotmath 的 CRAN 包:github.com/stefano-meschiari/latex2exp

标签: r unicode utf-8 character-encoding ggplot2


【解决方案1】:

您应该编辑您的问题,而不是放置子 cmets(我会看看我能对这个框做些什么。)。我有时会发现 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)

“d”是“方形”,至少我在参考了一组在线乳胶示例后理解您的意思:

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

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

【讨论】:

  • 我认为 OP 想要方括号,而不是括号。为此,您可以使用group,如下所示:group("[", list(theta, bolditalic(x)[italic(t)] ), "]")。 (从demo(plotmath) 的第 4 或第 5 页获得)。
  • 让我们看看。我会理解“方括号”这个词。
  • 同意。 '而不是括号'是我在这里的唯一线索,(而且我很容易弄错所要求的内容)。
  • 我很抱歉这个问题不清楚 - 我在主标题中寻找斜体希腊字母以及方括号,最好使用乳胶样式输入,这比手动添加斜体命令,通常比 plotmath 选项更灵活。被选中的人回答了他的每一个问题。
【解决方案2】:

您可能想查看tikzDevice 包(或先查看its vignette),它提供了一种在 R 图形中编写 LaTeX 数学的自然方法。

我也有a simple example here

这是另一个例子:

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 会产生这个:

【讨论】:

  • 我看到了那个例子,觉得它很牛逼,但是,我试图将它应用到这个例子中的努力失败了。
  • 我已经稍微编辑了答案。你可以玩自己的数学表达式。你需要给tikzDevice的只是一个纯文本字符串,所以如果你想让你的lambda是一个数字,你可以使用sprintf('\\alpha + %s + \\beta', 1.234)这样的代码;不需要bquote()substitute()expression() 的黑客攻击。
  • 我想这表明了 TeX 设置的不同。我从 TeXworks 处理器收到此错误消息(与我之前所做的相同):这是 pdfTeX,版本 3.1415926-1.40.10(TeX Live 2009)进入扩展模式(./math.tex !未定义的控制序列。l.3 \文档类 [10pt]{article} ?
  • 是的。 pdflatex 生成上面看到的图。
  • 谢谢,这正是我想要的!很高兴注意到带有 tikzDevice 的 sprintf 解决方案可以使用变量值,就像 bquote/substitute 一样(也许这很明显)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
  • 2014-11-02
  • 2020-03-07
  • 2019-05-09
  • 1970-01-01
  • 2011-08-28
相关资源
最近更新 更多