2013-06-01 21 views
2

如果我在同一個圖上有兩個數據集,那麼我可以在該圖上有兩個獨立的構面,每個對應於不同的數據集?基於多個數據集的獨立構面網格

例如,在散點圖中,可以在x方向上拆分一個數據,也可以在y方向拆分另一個數據集。

考慮,例如,下面的代碼,其中,我試圖爲小於0.5和大於0.5, 並且類似地,X軸的值d2 y軸分割d1。這運行,但我不明白爲什麼我得到我的結果。

有可能ggplot2根本沒有設計來做到這一點。我沒有記住應用程序,我只是想了解面向的限制,玩例子比試圖理解代碼更容易。

library("ggplot2") 

splitvec <- function(v) 
{ 
    if(v<0.5) 
    return("L") 
    else if(v>=0.5) 
    return("R") 
} 

set.seed(1) 
x1 <- runif(5, 0, 1) 
y1 <- runif(5, 0, 1) 
xsplit <- sapply(x1, splitvec) 
d1 = data.frame(x=x1, y=y1, X=xsplit) 
x2 <- runif(5, 0, 1) 
y2 <- runif(5, 0, 1) 
ysplit <- sapply(y2, splitvec) 
d2 = data.frame(x=x2, y=y2, Y=ysplit) 

r = ggplot() + 
    geom_point(data=d1, aes(x=x, y=y)) + facet_grid(~ X) + 
    geom_point(data=d2, aes(x=x, y=y)) + facet_grid(Y ~ .) 

回答

3

在這種情況下,你可以這樣做:

 facet_grid(Y~X) 

由於該網格小面依次施加。請注意,在這種情況下,您不能使用facet_wrap。 在這裏我重寫你的代碼使用不同的因素爲每個拆分變量(X,Y)。

d1$X <- ifelse(d1$x<0.5,'d1.L','d1.R') 
d2$Y <- ifelse(d2$x<0.5,'d2.L','d2.R') 

最好對每個數據使用不同的顏色來理解您的數據會發生什麼情況。

r = ggplot() + 
    geom_point(data=d1, aes(x=x, y=y),col='blue',size=10) + 
    geom_point(data=d2, aes(x=x, y=y))+ 
    facet_grid(Y~X,scales="free")+ 
    theme(strip.text = element_text(size=20)) 

enter image description here

+0

感謝你的努力。首先,你寫道:'d2 $ Y < - ifelse(d2 $ x <0.5,'d2.L','d2.R')'。我猜應該是'd2 $ Y < - ifelse(d2 $ y <0.5,'d2.L','d2.R')'。這與上面的圖片類似,但不是我想要的。我希望單位的方格在垂直和水平方向上分爲0.5,所有10個點都在適當的位置。相反,左邊的兩個小平面每個都有3個d1.L點的重複項,上下小平面分別包含對應於d2.L和d2.R的點。但也許我想要的是'ggplot2'不可能的。 –

+0

另外,感謝您對我的情節的改進。確實應該以不同的方式着色不同的數據集點。此外,我沒有考慮使用'ifelse',因爲我不是那種熟悉的R. –

+0

P.S.我想如果所有的點都在同一個數據集中,我會得到我想要的效果。 –