R 如何使用latex注释()ggplot

R 如何使用latex注释()ggplot,r,ggplot2,R,Ggplot2,我想使用annotate()将latex文本添加到ggplot2绘图中。使用expression()(如为轴标签添加乳胶所述)似乎不起作用。也就是说: # Use expression() to create subscripted text p <- ggplot(mpg, aes(x=cty, y=hwy)) + geom_point() + scale_x_continuous(expression(text[subscript])) # But expression() i

我想使用
annotate()
将latex文本添加到ggplot2绘图中。使用
expression()
(如为轴标签添加乳胶所述)似乎不起作用。也就是说:

# Use expression() to create subscripted text
p <- ggplot(mpg, aes(x=cty, y=hwy)) + geom_point() +
  scale_x_continuous(expression(text[subscript])) 

# But expression() in annotate adds nothing to the plot
p + annotate("text", x=10, y=40, label=expression(text[subscript])) 

# Passing regular text to annotate works fine
p + annotate("text", x=10, y=40, label="foo") 
#使用expression()创建下标文本

p您可以使用
parse
参数,而不使用
表达式

p + annotate("text", x=10, y=40, label="text[subscript]", parse=TRUE)
该软件包已返回CRAN(最新版本0.9于2015年11月发布)

使用
tikz
确实需要完全安装乳胶漆;在LaTeX文档中,通过
knitr
执行此操作可能最简单(只需在区块选项中设置
dev=“tikz”
)。但是,您也可以使用它创建独立的图形。具有讽刺意味的是,这个问题最难的部分是获取文本下标,这需要为
\textsubscript
命令添加一个LaTeX包(
fixltx2e

library(tikzDevice)
## add a package to the defaults
options(tikzLatexPackages=
            c(getOption("tikzLatexPackages"),"\\usepackage{fixltx2e}"))
tikz("tikz.tex",standAlone=TRUE)
library("ggplot2"); theme_set(theme_bw())
p <- ggplot(mpg, aes(x=cty, y=hwy)) + geom_point() +
  scale_x_continuous(name="text\\textsubscript{subscript}")
p + annotate("text", x=10, y=40, label="text\\textsubscript{subscript}")
dev.off()

system("pdflatex tikz.tex")
库(tikzDevice)
##将包添加到默认值
选项(tikzLatexPackages=
c(getOption(“tikzLatexPackages”),“\\usepackage{fixtx2e}”))
tikz(“tikz.tex”,standAlone=TRUE)
图书馆(“ggplot2”);theme_set(theme_bw())

p有一个名为
latex2exp
R
包,可能会有所帮助。它具有函数
TeX
,该函数接受一些用美元符号
$
括起来的LaTeX表达式,如本例所示:

library(latex2exp)
library(ggplot2)

qplot(1, "A")+
     ylab(TeX("Formula: $\\frac{2hc^2}{\\lambda^\\beta}$"))+
     xlab(TeX("$\\alpha$"))



更多示例可以在中找到。

您可以查看
tikzDevice
包…似乎不再积极维护。(但仍然可能有用!)我的理解是,它仍然被广泛使用,而且功能齐全,但由于更严格的CRAN/R CMD检查规则,目前处于孤儿院状态。。。最后一次修改是在R-forge 2012年7月15日…PS:当前的开发状态为,如果您尝试使用
label=expression(text[subscript]),parse=TRUE)
,您能为我确认一下您是否有任何异常行为吗?(我还没有升级到0.9.2…)好的…今天早上还是有点晕眩,我第一次错误地这么做了。以前从未见过R的这种反应。奇怪,这也是我第一次看到。它允许您使用在“?”之后键入的任何内容更正label参数。@Joran的注释-我看到了?),然后R Studio崩溃(Max OSX 10.7.4、R 2.14.1、RStudio 0.96.330、ggplot2 0.9.1)。选项
parse=TRUE
将其解释为
plotmath
类似于注释的数学表达式您的示例适用于标签,但问题是关于注释。对于我来说,您的示例在注释层中不起作用,但是,如果您指定output='character'并将'parse=TRUE'添加到注释调用中,它就会起作用
annotate(geom='text',x=3,y=3,label=Tex($\\hat{y}=B_0+B_1X_1,output='character'),parse=TRUE)
Hi你知道如何在文本上添加斜体吗?@jiagiang你熟悉@Vilmantas Gegzna吗?是的,我以前读过。我想要的是将
Tex()
输出为斜体。我尝试了
Tex(italic(“…”)
,但失败了。我浏览了一遍,但没有注意到任何有关斜体风格的内容。你可以试着更仔细地看。我不确定latex2exp是否支持斜体风格。回答得很好。编译需要一点时间,产生了一系列警告,如测量:\char77
的尺寸,但当unicode让我失望时,这是我的首选解决方案(请参阅)。这是一个很棒的答案@BenBolker,我设法将其适应我自己的图形,但我仍在努力调整打印的pdf文件的大小(高度和长度),有什么建议吗?不要随便提。我想,
tikz
选项中应该有一些东西可以让您处理这个问题?如果你不明白,我会说发布一个新问题是非常明智的。正如你所指出的,解决方法是在
tikz()
函数中使用
width
height
选项。例如,在您的回答中,它应该类似于下面的
tikz(“tikz.tex”,standAlone=TRUE,height=1,width=1.5)
。非常感谢@BenBolker,你救了这一天(一如既往!)。