2010-03-08 97 views
9

我試圖覆蓋一些ggplot條中的文字來合併希臘字符。以下是一些示例數據,以及劇情的基礎。ggplot條文中的希臘字母

dfr <- data.frame(
    x = rep(1:10, times = 6), 
    y = runif(60), 
    fx = rep(c("foo", "bar"), each = 30), 
    fy = rep(c("alpha", "beta", "gamma"), each = 10, times = 2) 
) 

p <- ggplot(dfr, aes(x, y)) + geom_point() 

我第一次嘗試一個情節在條形標籤中沒有希臘字母。

p + facet_grid(fy ~ fx) 

據我瞭解,我應該貼標機參數添加到facet_grid覆蓋文本。我推測這應該吐出一個表達式來處理希臘字符,但是當打印圖形時,我的代碼只會引發錯誤。

lbl <- function(variable, value) 
{ 
    if(variable == "fy") parse(text=as.character(value)) else value 
} 
p + facet_grid(fy ~ fx, labeller = lbl) 


Error in aperm(X, c(s.call, s.ans)) : 
    unimplemented type 'expression' in 'aperm' 

我應該如何創建條形標籤?

回答

9

試試這個:

p + facet_grid(fy ~ fx, labeller = label_parsed) 
+0

我發現這個答案的作品,但我無法弄清楚如何。 label_parsed從哪裏來?我無法在在線ggplot文檔中找到它。 – kmm 2010-03-10 19:30:48

+2

它在包文檔中有所提及(http://cran.r-project.org/web/packages/ggplot2/index.html);我同意這可以更好地記錄下來 - 我只知道我曾見過哈丁在某個時候提及它。 – 2010-03-10 20:56:07

+0

謝謝 - 我現在看到它。這是一個非常有用的命令。 – kmm 2010-03-11 04:03:10

3

,因爲它的相關位置張貼本:

如果你想變量本身以及可變的水平/值的名稱被當做表達式(即呈現爲好像它們是膠乳),嘗試:

label_parseall <- function(variable, value) { 
    plyr::llply(value, function(x) parse(text = paste(variable, 
     x, sep = "=="))) 
} 

實施例:

data <- data.frame(x = runif(10), y = runif(10), 
    gamma = sample(c("gamma[0]", "gamma[1]"), 10, rep = T)) 
ggplot(data, aes(x, y)) + geom_point() + facet_grid(~gamma, 
    labeller = label_parselabel) 

enter image description here

圖像在http://img709.imageshack.us/img709/1168/parseall.png