我有 x,y,z 数据,其中包含促进方面的分类变量。我想包括除第一个方面之外的所有轮廓线并丢弃其余数据。可视化该过程的一种方法是对数据进行刻面,并在心理上将轮廓从其他刻面移动到第一个刻面。
MWE:
library(ggplot2)
library(dplyr)
data(volcano)
nx <- 87; ny <- 61
vdat <- data_frame(w=0L, x=rep(seq_len(nx), ny), y=rep(seq_len(ny), each=nx), z=c(volcano))
vdat <- bind_rows(vdat,
mutate(vdat, w=1L, x=x+4, y=y+4, z=z-20),
mutate(vdat, w=2L, x=x+8, y=y+8, z=z-40))
ggplot(vdat, aes(x, y, fill=z)) +
geom_tile() +
facet_wrap(~ w, nrow=1) +
geom_contour(aes(z=z), color='white', breaks=c(-Inf,110,Inf))
在每个方面,我都有:
- 刻面 0:X、Y、Z 为
w==0L
,轮廓为w==0L
- 方面 1:X、Y、Z 为
w==1L
,轮廓为w==1L
- 方面 2: X,Y,Z 用于
w==2L
, 轮廓用于w==2L
我想要的是一个单一的窗格,有效地:
- X,Y,Z for ,分类
w==0L
的所有值的轮廓w
(原谅我草率的 GIMP 技能。在真实数据中,轮廓可能不会重叠,但我认为这不是问题。)
z
对于相同的 X、Y 系统,真实数据具有不同的值(和梯度) ,因此轮廓与第一个面兼容。然而,它仍然是“不同的”,所以我不能用单个w==0L
数据来模拟轮廓。
我想可能有几种方法可以做到这一点:
- 第一次“正确”形成数据,告知
ggplot
如何拉动轮廓但将它们放在单个图上(例如,data=
对某些层使用不同的); - 形成多面图,从其他方面提取轮廓,将它们应用于第一个方面,并丢弃其他方面(可能使用
grid
和/或gtable
);也许 - (我自己数学计算轮廓并将它们添加为独立的线;我希望重新使用
ggplot2
' 的努力来避免这种情况......)。