小平面标签涉及希腊符号

mit*_*hus 5 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)
Run Code Online (Sandbox Code Playgroud)

我希望facet标签分别读作"tau = 0"和"tau = 1",并将tau格式化为希腊符号.我从另一个问题中得知,使用贴标机label_parsed将自己格式化字母tau,但等号似乎使事情变得复杂.一个理想的解决方案不需要我更改数据(即使tau成为一个因素并命名其级别),但我将采取任何有效的工作:)

ags*_*udy 10

这里有一个解决方案,通过facet_gridadn索引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)))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

编辑获取"tau = 0"和"tau = 1"

facet_grid(~ tau,labeller = label_bquote(tau == .(x)))
Run Code Online (Sandbox Code Playgroud)

Edit2第二个变量sigma

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

在此输入图像描述

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())
Run Code Online (Sandbox Code Playgroud)