2014-07-04 106 views
2

我想更改facet标签,使得我在y轴上有希腊字母,在x轴上有正常文字。测试数据是:R希腊字母和R facet网格中facet标签的正常字母

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

将是感激任何帮助!

回答

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

+0

神奇的情节,太感谢你了!因为我想要“伽马= 1”,所以我有一个小题大做,这是另一个问题,我在第一个例子中已经有了。所以如果有人对此感兴趣的话 – user3805780

+0

如果你想在facet标签中使用'gamma = 0/1',只需使用'get_label_swap(gamma = list(“0”= expression(gamma == 0),“1”= expression gamma == 1)))' – MrFlick

+0

对不起,我无法完成我的评论,你更快。我写了“表达式(gamma *”= 0.001“)”来绕过这个问题。无论如何非常感谢你,这太棒了! :) 你让我今天一整天都感觉很好。 – user3805780

相关问题