2013-01-06 12 views
5

Załóżmy, że mam dane i wykres w następujący sposób:Facet etykiety udziałem grecki symbol

mydata = data.frame(x=rnorm(4), y=runif(4), tau=c(0,0,1,1)) 
ggplot(mydata) + geom_point(aes(x=x, y=y)) + facet_wrap(~ tau) 

chciałbym etykiety fazowane czytać "tau = 0" i "tau = 1", odpowiednio, z tau sformatowany jako symbol grecki. Wiem od another question, że użycie etykieciarki label_parsed samo sformatuje literę tau, ale znak równości wydaje się komplikować rzeczy. Idealne rozwiązanie nie wymagałoby zmiany danych (tzn. Uczynienia tau czynnikiem i nazwania jego poziomów), ale weźmę cokolwiek działa :)

Odpowiedz

8

tutaj rozwiązanie z facet_grid i indeksowaniem tau według jego poziomów.

mydata = data.frame(x=rnorm(4), y=runif(4), tau=c(0,0,1,1)) 
ggplot(mydata) + geom_point(aes(x=x, y=y)) + 
     facet_grid(~ tau,labeller = label_bquote(tau^.(x))) 

enter image description here

Edit Aby uzyskać "tau = 0" i "tau = 1"

facet_grid(~ tau,labeller = label_bquote(tau == .(x))) 

Edit2 sekund zmienna sigma

Uważam to rozwiązanie , definiując niestandardową etykieciarkę. Mam nadzieję, że ktoś (faceci ggplot2) dał mi prostsze rozwiązanie.

enter image description here

my.label_bquote <- function (expr1 = (tau == .(x)),expr2 = (sigma == .(x))) 
{ 
    quoted1<- substitute(expr1) 
    quoted2 <- substitute(expr2) 
    function(variable, value) { 
     value <- as.character(value) 
     if(variable == 'tau') 
     lapply(value, function(x) 
       eval(substitute(bquote(expr1, list(x = x)),list(expr1 = quoted1)))) 
     else 
     lapply(value, function(x) 
       eval(substitute(bquote(expr2, list(x = x)),list(expr2 = quoted2)))) 
    } 
} 

mydata = data.frame(x=rnorm(4), y=runif(4), tau=c(0,0,1,1),sigma=c(2,2,3,3)) 
ggplot(mydata) + geom_point(aes(x=x, y=y)) + 
    facet_grid(sigma ~ tau,labeller = my.label_bquote()) 
+0

Nice! Czy można to rozszerzyć na dwa wymiary? Na przykład. jeśli mam drugą zmienną sigma, którą chcę zastosować, używając 'facet_grid'. – mitchus

+2

@mitchus Aktualizuję rozwiązanie mys, aby dodać drugą zmienną. – agstudy

+0

Wielkie dzięki, działa wspaniale! – mitchus

Powiązane problemy