Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Facet labels involving a greek symbol

Tags:

r

ggplot2

Suppose I have the data and plot as follows:

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)

I would like the facet labels to read "tau=0" and "tau=1", respectively, with tau formatted as its greek symbol. I know from another question that using the labeller label_parsed will format the letter tau by itself, but the equal sign seems to complicate things. An ideal solution would not require me to change the data (i.e. make tau a factor and name its levels), but I will take whatever works :)

like image 342
mitchus Avatar asked Jan 06 '13 10:01

mitchus


2 Answers

here a solution with facet_grid adn indexing the tau by its levels.

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 To get the "tau=0" and "tau=1"

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

Edit2 second variable sigma

I find this solution, by defining a custom labeller. Hope someone ( ggplot2 guys ) give me a simpler solution.

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())
like image 190
agstudy Avatar answered Nov 02 '22 20:11

agstudy


There is an easier solution to this. The simulated data variable names have been changed for clarity in how they work within the labeller argument.

mydata = data.frame(x=rnorm(4), y=runif(4), tauvar=c(0,0,1,1),sigmavar=c(2,2,3,3))

ggplot(mydata) + 
   geom_point(aes(x=x, y=y)) +
   facet_grid(sigmavar ~ tauvar,labeller = label_bquote(sigma==.(sigmavar),
                                                   tau==.(tauvar)))
like image 26
Val N. Avatar answered Nov 02 '22 20:11

Val N.