2012-09-20 6 views
15

Chciałbym dodać tekst lateksu na wykresie ggplot2 przy użyciu annotate(). Używanie expression(), zgodnie z opisem here do dodawania lateksu do etykiet osi, nie działa. Słownie:Jak dodawać adnotacje() ggplot z lateksem

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

Dlaczego expression s traktowane inaczej przez annotate niż przez inne funkcje ggplot? A jak mogę opisać z lateksem?

+0

możesz rzucić okiem na pakiet 'tikzDevice' ... –

+0

Wygląda na to, że nie jest już aktywnie utrzymywany. (Ale nadal potencjalnie przydatny!) –

+1

Rozumiem, że nadal jest dość powszechnie używany i funkcjonalny, ale w obecnym stanie sierocińca z powodu zaostrzonych reguł kontroli CRAN/R CMD ... został ostatnio zmodyfikowany na R-kuźni 15 lipca 2012 ... –

Odpowiedz

13

Można użyć parse argument, bez expression:

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

Czy możesz mi potwierdzić, czy zachowujesz się nietypowo, jeśli spróbujesz użyć wyrażenia 'label = expression (tekst [subscript]), parsowanie = TRUE) '? (Nie zaktualizowałem jeszcze do 0.9.2 ...) – joran

+0

Tak, to nie podoba się. –

+0

Ok ... wciąż trochę oszołomiony dziś rano i zrobiłem to przez pomyłkę po raz pierwszy. Nigdy wcześniej nie widziałem takiej reakcji od R. Dziwne. – joran

4

tikzDevice pakiet jest z powrotem na CRAN (najnowsza wersja 0.9 opublikowany listopada 2015).

Używanie tikz wymaga pełnej instalacji LaTeX; może być najłatwiej zrobić poprzez knitr w dokumencie LaTeX (wystarczy ustawić dev="tikz" w opcjach porcji). Można jednak użyć go do utworzenia osobnej figury. Paradoksalnie, najtrudniejsza część tego pytania było uzyskanie indeks tekstowy, który wymaga dodatkowego pakietu LaTeX (fixltx2e) dla komendy \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

Jest R pakiet nazywa latex2exp który może być pomocne. Posiada funkcję TeX który akceptuje niektóre wyrażenia LaTeX zamknięte ze znakiem dolara $ jak w poniższym przykładzie:

library(latex2exp) 
library(ggplot2) 

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

Example

Więcej przykładów można znaleźć w this vignette.

+5

Twój przykład działa dla etykiet, ale pytanie dotyczyło adnotacji. Twój przykład nie działa dla mnie w warstwie adnotacyjnej, ale jeśli podasz output = 'character' i dodasz 'parse = TRUE' do połączenia z adnotacjami, to robi to. 'adnotacja (geom = 'tekst', x = 3, y = 3, etykieta = tex (" $ \\ kapelusz {Y} = B_0 + B_1X_1 ", wynik = 'znak'), parsowanie = PRAWDA) ' – svannoy

Powiązane problemy