Подтвердить что ты не робот

Как аннотировать() ggplot с латексом

Я хотел бы добавить текст латекса в график ggplot2, используя annotate(). Используя 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 обрабатывается по-разному на annotate, чем другими функциями ggplot? И как я могу аннотироваться с помощью латекса?

4b9b3361

Ответ 1

Вы можете использовать аргумент parse без expression:

p + annotate("text", x=10, y=40, label="text[subscript]", parse=TRUE)

Ответ 2

Существует пакет R с именем latex2exp, который может быть полезен. Он имеет функцию TeX, которая принимает некоторые выражения LaTeX, заключенные со знаком доллара $, как в этом примере:

library(latex2exp)
library(ggplot2)

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

Пример

Дополнительные примеры можно найти в этой виньетике.

Ответ 3

Пакет tikzDevice возвращается на CRAN (последняя версия 0.9 опубликована в ноябре 2015 г.).

Использование tikz требует полной установки LaTeX; это может быть проще всего сделать через knitr в документе LaTeX (просто установите dev="tikz" в опции chunk). Однако вы можете использовать его и для создания отдельной фигуры. Как ни странно, самой сложной частью этого вопроса был получение текстового индекса, для которого требуется дополнительный пакет 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")

введите описание изображения здесь