2012-09-20 13 views
15

Vorrei aggiungere il testo in lattice a un grafico ggplot2 utilizzando annotate(). L'utilizzo di expression(), come descritto in here per l'aggiunta di etichette in lattice su assi, non sembra funzionare. Vale a dire:Come annotare() ggplot con latex

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

Perché sono expression s trattati diversamente da annotate che da altre funzioni ggplot? E come posso annotare con il lattice?

+0

si potrebbe dare un'occhiata al pacchetto 'tikzDevice' ... –

+0

Sembra non essere più mantenuto attivamente. (Ma ancora potenzialmente utile!) –

+1

La mia comprensione è che è ancora abbastanza ampiamente utilizzato e funzionale, ma in uno stato attuale di orfanotrofio a causa di regole di controllo CRAN/R CMD più severe ... è stato modificato l'ultima volta su R-forge il 15 luglio 2012 ... –

risposta

13

È possibile utilizzare l'argomento parse, senza expression:

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

Puoi confermare per me se ottieni un comportamento insolito se provi ad usare 'label = expression (testo [pedice]), parse = TRUE) '? (Non ho ancora aggiornato a 0.9.2 ...) – joran

+0

Sì, non gli piace. –

+0

Ok ... stamattina sono un po 'stordito, e l'ho fatto per sbaglio prima volta. Non ho mai visto quel tipo di risposta da R prima. Strano. – joran

4

Il pacchetto tikzDevice è tornato su CRAN (ultima versione 0.9 pubblicata Nov 2015).

L'utilizzo di tikz richiede un'installazione completa di LaTeX; potrebbe essere più facile da fare tramite knitr all'interno di un documento LaTeX (basta impostare dev="tikz" nelle opzioni del blocco). Tuttavia, puoi usarlo anche per creare una figura indipendente. Ironia della sorte, la parte più difficile di questa domanda stava diventando un pedice testo, che richiede un pacchetto LaTeX supplementare (fixltx2e) per il 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

V'è un pacchetto chiamato Rlatex2exp che potrebbe essere utile Ha funzione TeX che accetta alcune espressioni LaTeX chiusa con il segno del dollaro $ come in questo esempio:

library(latex2exp) 
library(ggplot2) 

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

Example

Più esempi si possono trovare in this vignette.

+5

L'esempio funziona per le etichette, ma la domanda riguardava l'annotazione. Il tuo esempio non funziona per me in un livello di annotazione, ma, se specifichi output = 'character' e aggiungi 'parse = TRUE' alla chiamata annotate. 'annotate (geom = 'testo', x = 3, y = 3, label = Tex (" $ \\ hat {Y} = B_0 + B_1X_1 ", output = 'carattere'), parse = TRUE) ' – svannoy