2012-09-20 41 views
15

Me gustaría agregar texto de látex a un diagrama de ggplot2 usando annotate(). El uso de expression(), como se describe en here para agregar etiquetas de látex a eje, no parece funcionar. A saber:Cómo anotar() ggplot con látex

# 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é expression s tratados de manera diferente por annotate que por otras funciones ggplot? ¿Y cómo puedo hacer anotaciones con látex?

+0

puede echar un vistazo al paquete 'tikzDevice' ... –

+0

Parece que ya no se mantiene activamente. (¡Pero aún así potencialmente útil!) –

+1

Según tengo entendido, todavía es bastante utilizado y funcional, pero en un estado actual de orfanato debido a las reglas de verificación CRAN/R CMD más estrictas ... fue modificado por última vez en R-forge el 15 de julio 2012 ... –

Respuesta

13

Usted puede utilizar el argumento parse, sin expression:

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

¿Podría confirmar si tiene algún comportamiento inusual si intenta usar 'label = expression (texto [subíndice]), parse = TRUE) '? (Todavía no me actualicé a 0.9.2 ...) – joran

+0

Sí, no me gusta eso. –

+0

Ok ... aún estoy un poco atontado esta mañana, y lo hice por error la primera vez. Nunca he visto ese tipo de respuesta de R antes. Extraño. – joran

4

El tikzDevice paquete está de vuelta en CRAN (última versión 0.9 publicada Nov 2015).

El uso de tikz requiere una instalación completa de LaTeX; puede ser más fácil de hacer a través de knitr dentro de un documento LaTeX (simplemente configure dev="tikz" en las opciones de fragmento). Sin embargo, puede usarlo para crear una figura independiente también. Irónicamente, la parte más difícil de esta pregunta era conseguir un subíndice texto, que requiere un paquete de 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") 

enter image description here

14

hay un paquete llamado Rlatex2exp cuales puede ser útil. Tiene función TeX que acepta algunas expresiones LaTeX cerrados con 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$")) 

Example

Más ejemplos se pueden encontrar en this vignette.

+5

Su ejemplo funciona para las etiquetas, pero la pregunta era sobre anotar. Su ejemplo no funciona en una capa de anotación, pero si especifica output = 'character' y agrega 'parse = TRUE' a la llamada de anotación, lo hace. 'annotate (geom = 'text', x = 3, y = 3, label = Tex (" $ \\ hat {Y} = B_0 + B_1X_1 ", salida = 'caracter'), parse = TRUE) ' – svannoy