【问题标题】:Facet labels involving a greek symbol涉及希腊符号的构面标签
【发布时间】:2013-01-06 10:24:39
【问题描述】:

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

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)

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

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这里有一个解决方案,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)))
    

    编辑获取“tau=0”和“tau=1”

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

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

    【讨论】:

    • 不错!这也可以扩展到二维吗?例如。如果我要处理第二个变量 sigma,请使用 facet_grid
    • 第二个变量解决方案非常“一次性”,但经过一点修改后它对我有用。特别是,我删除了 expr1expr2 值周围的括号,并注释掉了 browser() 调用。还必须为我的应用程序更改 variable == 'tau'
    • @ZoëClark 感谢您的反馈。我删除了浏览器声明。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2022-06-21
      • 1970-01-01
      • 2015-02-25
      • 1970-01-01
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      • 2017-07-14
      相关资源
      最近更新 更多