2013-05-15 112 views
0

我使用下面顯示的代碼創建3x3分面圖。問題是我沒有傳說。使用facet_grid向ggplot添加圖例

# Create column vectors 
XID <- rep(c(1,5,10), each=57) 
TAD.unit <- c(0, 0.25, 0.5, 0.75, 1, 1.5, 2, 3, 4, 6, 8, 10, 12, 16, 20, 24, 36, 48, 72) 
TAD <- rep(TAD.unit, length=length(XID)) 
FID <-rep(c(1,2,3),each=length(TAD.unit),length=length(XID)) 
time <- TAD + (FID-1)*14*24 
dist1 <- pweibull(TAD,2,2) 
dist2 <- pweibull(TAD,2,4) 

# Create data frame 
data.df <- as.data.frame(cbind(XID,time, FID, dist1, dist2, TAD)) 

library(ggplot2) 
label_both = function(column,value){paste(column,"=",value)} 

# Create plot 
my.plot1 <- ggplot(data.df, aes(x=TAD, y=dist1)) + geom_point() + 
    geom_line(aes(x=TAD, y=dist2)) + 
    facet_grid(XID ~ FID, labeller=label_both) + 
    labs(x = "TAD", y = "Response") 

# alternative data structure per recommendation in 
# http://stackoverflow.com/questions/15418302/ggplot2-how-to-show-the-legend?rq=1 
library(reshape) 
df.2 <- melt(data.df, id=c("XID","FID","TAD","time")) 

我嘗試使用數據幀df.2,看看是否有助於每個建議在堆棧溢出線程我提供的鏈接。我嘗試過各種ggplot命令,但我仍然無法使它工作。 有人可以幫我嗎?

另外,如何將圖例定位在3x3內有空白的地方?

非常感謝!

回答

0

至於圖例繪製,請使用熔化的數據框,例如使用顏色來區分你的兩個距離數據集。例如。像這樣:

ggplot(df.2, aes(x=TAD, y=value, colour = variable)) + geom_line() + facet_grid(XID ~ FID, labeller=label_both) + labs(x = "TAD", y = "Response") 

至於傳說中的定位,我想請您看看這個問題,有一個很好的答案:

Position legend in first plot of facet

+0

謝謝你的小費!我想爲手稿準備情節,所以我更喜歡保持黑白兩色,並且只有一個響應的符號和另一個響應的符號,以便在視覺上更好地區分兩個響應。這方面的任何建議? –

+0

而不是'color = variable'使用'shape = variable'。有關如何區分不同數據集的更多信息,請訪問:http://docs.ggplot2.org/current/aes_linetype_size_shape.html – thunk

+0

再次感謝'thunk'。形狀=變量保持事物黑白,但創建兩行,儘管沒有傳說。我當然可以改變線型來區分。問題是,我提供了SO的樣本數據。真實的數據是這樣的,兩條線實際上會重疊。所以這就是爲什麼我需要一個變量的geom_point()和另一個變量的geom_line()。在這種情況下,我希望創造一個傳奇。 –