2016-12-20 49 views
0

我試圖生成一個多層的圖,其中一個圖層中的點只顯示在使用來自另一圖層的數據創建的一部分面上。在下面的代碼中,紅色的點是x1x2(就像面的行標籤一樣)。在多層圖的一個面上顯示要素的子集

library(ggplot2) 

set.seed(1000) 

#generate first df 
df1 = data.frame(x=rep(rep(seq(2,8,2),4),4), 
       y=rep(rep(seq(2,8,2),each=4),4), 
       v1=rep(c("x1","x2"),each=32), 
       v2=rep(rep(c("t1","t2"),each=16),2), 
       v3=rbinom(64,1,0.5)) 

# generate second df 
df2 = data.frame(x=runif(20)*10, 
       y=runif(20)*10, 
       v4=sample(c("x1","x2"),20,T)) 

# create theme 
t1=theme(panel.grid.major = element_blank(), text = element_text(size=18), 
     panel.grid.minor = element_blank(), strip.background= element_blank(), 
     axis.title.x = element_blank(), axis.title.y = element_blank()) 

# plot 
ggplot() + 
    geom_point(data=df1, aes(x=x, y=y, colour = factor(v3)), shape=15, size=5) + 
    scale_colour_manual(values = c(NA,"black")) + facet_grid(v1~v2) + 
    geom_point(data=df2, aes(x=x,y=y, shape=v4), colour="red", size=4) + 
    coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1 

EDIT:黑方塊是由的df1$v3 = 1顏色手動設置到blackdf1$v3 = 0NA生成。 /EDIT

但我真正想要的是面的第一行與df2$v4 = x1只顯示來自df2這些點和麪(對應於df1$v1值和行標籤的第二行中df2$v4 = x2小平面)。

我已經通過生成兩個獨立的圖表做到了這一點......

ggplot() + 
    geom_point(data=df1[df1$v1=="x1",], shape=15, size=5, 
    aes(x=x, y=y, colour = factor(v3)),) + 
    scale_colour_manual(values = c(NA,"black")) + facet_grid(~v2) + 
    geom_point(data=df2[df2$v4=="x1",], aes(x=x,y=y), colour="red", size=4) + 
    coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1 

ggplot() + 
    geom_point(data=df1[df1$v1=="x2",], shape=15, size=5, 
    aes(x=x, y=y, colour = factor(v3)),) + 
    scale_colour_manual(values = c(NA,"black")) + facet_grid(~v2) + 
    geom_point(data=df2[df2$v4=="x2",], aes(x=x,y=y), colour="red", size=4) + 
    coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + t1 

...但我很好奇,如果可以,因爲與我的實際數據集生成一個單一的情節我有幾個x's,將圖形拼接在一起非常耗時。

回答

4

有何幫助,如果我們只是重新命名df2$v4或創建一個名爲df2$v1新列中,刻面的目的:

df2 <- dplyr::rename(df2, v1 = v4) 
df2$v1 <- df2$v4 
# either works 

然後ggplot將分發數據點,你想,有這樣的:

ggplot() + 
    geom_point(data=df1, aes(x=x, y=y, colour = factor(v3)), shape=15, size=5) + 
    scale_colour_manual(values = c(NA,"black")) + 
    facet_grid(v1~v2) + 
    geom_point(data=df2, aes(x=x,y=y), colour="red", size=4) + 
    coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) + 
    t1 

enter image description here

不是100%肯定我抓住你的問題......

+0

是的,你已經理解我的問題。目標是顯示來自df2的點,這些點僅與用於子集和創建構面的值相對應。我很尷尬,我沒有嘗試這個可笑的簡單步驟!謝謝。 – zoneparser

相關問題