小平面标签涉及希腊符号

时间:2013-01-06 10:24:40

标签: r ggplot2

假设我有如下数据和图表:

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)

我希望facet标签分别读作“tau = 0”和“tau = 1”,并将tau格式化为希腊符号。我从another question知道使用标签符label_parsed会自己格式化字母tau,但等号似乎使事情变得复杂。理想的解决方案不需要我更改数据(即将tau设为一个因子并命名其级别),但我将采取任何有效的方法:)

2 个答案:

答案 0 :(得分:10)

这里有一个解决方案facet_grid adn索引tau的级别。

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

修改获取“tau = 0”和“tau = 1”

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

Edit2 第二个变量sigma

我通过定义自定义贴标机找到了这个解决方案。希望有人(ggplot2人)给我一个更简单的解决方案。

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())

答案 1 :(得分:1)

有一个更简单的解决方案。模拟数据变量名称已更改,以清楚它们在labeller参数中的工作方式。

0