0
我試圖生成一個多層的圖,其中一個圖層中的點只顯示在使用來自另一圖層的數據創建的一部分面上。在下面的代碼中,紅色的點是x1
或x2
(就像面的行標籤一樣)。在多層圖的一個面上顯示要素的子集
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
顏色手動設置到black
和df1$v3 = 0
到NA
生成。 /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
,將圖形拼接在一起非常耗時。
是的,你已經理解我的問題。目標是顯示來自df2的點,這些點僅與用於子集和創建構面的值相對應。我很尷尬,我沒有嘗試這個可笑的簡單步驟!謝謝。 – zoneparser