2014-07-04 164 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

相關問題