2011-06-08 91 views
1

我想在沒有直接輸入圖例的情況下添加一個表達式到圖例條目(因爲我正在循環變量)。從本質上講,我想這樣的:從data.frame到ggplot2圖例的表達式

d <- data.frame(x=1:10,y=1:10,f=rep(c("0–74",">=75"),each=5)) 
qplot(x,y,data=d,color=f) 

輸出這樣做的方式:

qplot(x,y,data=d,color=f) + 
scale_colour_manual(values=1:2,breaks=c("0–74",">=75"), 
labels=c(expression(0<=75), expression("">=75))) 

(但實際上我想的第一個條目0 < = 74是0-74,但我m在混合表達式和非表達式時遇到了問題)。

我確定它是某種設置,但是我嘗試過的所有東西都沒有奏效。有任何想法嗎?

+0

這是GGPLOT2或ggplot問題? – Marek 2011-06-09 12:43:58

回答

2

我想你可以在循環中使用parse(text=)將字符串轉換爲適當的表達式。所以,你可以從你的˚F變量取字符串和傳遞他們的方式是這樣的(一些調整,可能是必要的)設置scale_colour_manual與適當的標籤:

scale_colour_manual(...,labels=c(parse(text=lab1),parse(text=lab2))) 

儘管解析不喜歡">=75"所以你可能會想要像"''>=75"

例如:

qplot(x,y,data=d,color=f) + 
    scale_colour_manual(values=1:2,breaks=c("0–74",">=75"), 
    labels=c(parse(text="0-74"), parse(text=paste("''",">=75",sep="")))) 
+0

謝謝!這對我提供的情況非常有效。不過由於某種原因,它不適用於更復雜的情節(實際上是地圖),我曾希望將它用於(我將省掉其中的細節)。我只是不斷收到錯誤'錯誤在lapply(X,FUN,...): 'pairlist'對象不能被強制鍵入'double''。我想我必須在某個時候弄清楚這一點...... – Tom 2011-06-09 13:25:57