r - ggplot - ggtitle position
Cómo anotar() ggplot con látex (3)
Me gustaría agregar texto de látex a un gráfico de ggplot2 usando annotate()
. El uso de expression()
, como se describe here para agregar látex a las etiquetas de ejes, no parece funcionar. Esto es:
# 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")
¿Por qué las expression
tratan de manera diferente por annotate
que por otras funciones de ggplot? ¿Y cómo puedo anotar con látex?
El paquete tikzDevice está de vuelta en CRAN (última versión 0.9 publicada en noviembre de 2015).
El uso de tikz
requiere una instalación completa de LaTeX; puede ser más fácil hacerlo a través de knitr
dentro de un documento LaTeX (simplemente configure dev="tikz"
en las opciones de fragmentos). Sin embargo, también puede usarlo para crear una figura independiente. Irónicamente, la parte más difícil de esta pregunta fue obtener un subíndice de texto, que requiere un paquete LaTeX adicional ( fixltx2e
) para el comando /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")
Hay un paquete R
llamado latex2exp
que puede ser útil. Tiene la función TeX
que acepta algunas expresiones LaTeX incluidas con el signo de dólar $
como en este ejemplo:
library(latex2exp)
library(ggplot2)
qplot(1, "A")+
ylab(TeX("Formula: $//frac{2hc^2}{//lambda^//beta}$"))+
xlab(TeX("$//alpha$"))
Más ejemplos se pueden encontrar en esta viñeta .
Puedes usar el argumento parse
, sin expression
:
p + annotate("text", x=10, y=40, label="text[subscript]", parse=TRUE)