2012-09-20 10 views
15

Ich möchte Latex-Text zu einem ggplot2-Diagramm mit annotate() hinzufügen. Die Verwendung von expression(), wie beschrieben here zum Hinzufügen von Latex zu Achsenbeschriftungen, scheint nicht zu funktionieren. Nämlich:How to Annotate() ggplot mit 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") 

Warum expression s von annotate als durch andere ggplot Funktionen unterschiedlich behandelt? Und wie kann ich mit Latex annotieren?

+0

können Sie sich das Paket 'tikzDevice' anschauen ... –

+0

Scheint nicht mehr aktiv gepflegt zu werden. (Aber immer noch potenziell nützlich!) –

+1

Mein Verständnis ist, dass es immer noch ziemlich weit verbreitet und funktional ist, aber in einem aktuellen Zustand des Waisenhauses aufgrund der strengeren CRAN/R CMD Check Regeln ... es wurde zuletzt am R-Schmiede 15. Juli geändert 2012 ... –

Antwort

13

Sie können das parse Argument, ohne expression:

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

Können Sie mir bestätigen, ob Sie ein ungewöhnliches Verhalten erhalten, wenn Sie versuchen, "label = expression" zu verwenden (text [tiefgestellt]), parse = TRUE) '? (Ich habe noch kein Upgrade auf 0.9.2 gemacht ...) – joran

+0

Ja, das mag das nicht. –

+0

Ok ... heute Morgen noch ein bisschen benommen, und das habe ich beim ersten Mal versehentlich gemacht. Ich habe noch nie solche Reaktionen von R gesehen. Seltsam. – joran

4

Das tikzDevice Paket ist zurück auf CRAN (neueste Version 0.9 veröffentlicht November 2015).

Die Verwendung von tikz erfordert eine vollständige LaTeX-Installation; Es kann am einfachsten sein, über knitr innerhalb eines LaTeX-Dokuments zu tun (setzen Sie einfach dev="tikz" in den Chunk-Optionen). Sie können es jedoch auch verwenden, um eine eigenständige Figur zu erstellen. Ironischerweise war der schwierigste Teil dieser Frage einen Text Index bekommen, die ein zusätzliches LaTeX-Paket (fixltx2e) für den \textsubscript Befehl ...

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

Es wird ein R Paket latex2exp genannt erfordert die kann hilfreich sein. Es hat die Funktion TeX die $ wie in diesem Beispiel einige LaTeX Ausdrücke eingeschlossen mit Dollarzeichen akzeptiert:

library(latex2exp) 
library(ggplot2) 

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

Example

Weitere Beispiele finden Sie in this vignette finden.

+5

Ihr Beispiel funktioniert für Etiketten, aber die Frage war, kommentieren. Ihr Beispiel funktioniert nicht in einem Annotate-Layer für mich, aber wenn Sie output = 'character' angeben und 'parse = TRUE' zum Annotate-Aufruf hinzufügen, wird dies durchgeführt. 'kommentieren (geom = 'Text', x = 3, y = 3, Label = Tex (" $ \\ Hut {Y} = B_0 + B_1X_1 ", Ausgabe = 'Zeichen'), Parse = TRUE) ' – svannoy