R希腊字母和R刻面网格中的构面标签的普通字母

时间:2014-07-04 19:11:59

标签: r label

我想更改构面标签,这样我在y轴上有希腊字母,在x轴上有普通文字。测试数据是:

testdata<-data.frame(Method2=c("a","a","b","b"),
 gamma=c(0,1,0,1),values=c(1,2,3,4),x=rep(1,4),y=rep(1,4))

testplot2<-ggplot(data=testdata,aes(x=Method2,y=gamma))
testplot2<-testplot2+facet_grid(gamma~Method2 )
testplot2+geom_point()

到目前为止,我已经在许多不同的星座中尝试了以下内容,而且我变得非常绝望: 1)使用粘贴表达式更改数据框中的名称,并使用label_parsed但没有太大成功。

gamma<- factor(sapply(testdata$gamma, function(n){
 if(n %in% c("0")) paste(expression(gamma),"0") else
 if(n %in% c("1")) paste(expression(gamma),"1") 
}), levels=c(paste(expression(gamma),"0"),
         paste(expression(gamma),"1")
))
testdata$gamma <- gamma

2)我尝试使用带有

的贴标机
my.label_bquote <- function (expr1 = (gamma == .(x)),expr2 = x) 
 {
     quoted1<- substitute(expr1)

    function(variable, value) {
         value <- as.character(value)
         browser()
         if(variable == gamma)
             lapply(value, function(x) eval(substitute(bquote(expr1, list(x = x)),list(expr1 = quoted1))))

        else if(variable == Method2){

           value[value=="a"]   <- "Whatever"
           value[value=="b"]   <- "Whatever2"

         }
         return(value)

         }
 }

这是对类似问题的先前答案的更改形式: Facet labels involving a greek symbol

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

我们如何创建各种标签交换工厂。这是一个通用函数,允许重命名构面标签中的值级别

get_label_swap <- function(...) {
    dots<-list(...)
    function(variable, value) {
        if(variable %in% names(dots)) {
            swaps <- dots[[variable]]
            vals <- as.character(value)
            lapply(vals, function(v) {if(v %in% names(swaps)) swaps[[v]] else v })
        } else {
            label_value(variable, value)
        }
    }
}

然后,为了得到一个特定的问题,我们会做

label_swap <- get_label_swap(gamma=list("0"=expression(gamma*0), 
                                        "1"=expression(gamma*1)))

因此该函数查看命名参数并期望一个列表,其中列表的名称是因子的值,列表中的值是您要替换它们的值。因此,只有变量“gamma”才会将“0”和“1”与适当的表达式交换。然后它返回一个我们可以作为labeller=参数传递给ggplot的函数。因此我们用

绘图
testplot2 <- ggplot(data=testdata,aes(x=Method2,y=gamma))
testplot2 <- testplot2+facet_grid(gamma~Method2, labeller=label_swap)
testplot2 + geom_point()

导致

enter image description here