52

我想使用annotate(). 使用expression(),如here所述将乳胶添加到轴标签,似乎不起作用。以机智:

# 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") 

为什么expressions 与annotate其他 ggplot 函数的处理方式不同?我怎样才能用乳胶注释?

4

3 回答 3

60

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

library(latex2exp)
library(ggplot2)

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

例子

更多示例可在此小插图中找到。

于 2016-11-10T13:11:39.813 回答
23

您可以使用parse参数,而不使用expression

p + annotate("text", x=10, y=40, label="text[subscript]", parse=TRUE)
于 2012-09-20T14:32:46.237 回答
16

tikzDevice包重新回到 CRAN(2015 年 11 月发布的最新版本 0.9)。

使用tikz确实需要完整的 LaTeX 安装;knitr在 LaTeX 文档中通过它可能是最简单的(只需dev="tikz"在块选项中设置)。但是,您也可以使用它来创建独立的图形。具有讽刺意味的是,这个问题最难的部分是获得一个文本下标,这需要一个额外的 LaTeX 包 ( fixltx2e) 用于\textsubscript命令......

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")

在此处输入图像描述

于 2015-12-19T15:42:11.360 回答