У меня есть данные 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))
![enter image description here](https://i.stack.imgur.com/2GiBG.png)
В каждом аспекте у меня есть:
- фасет 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 для
w==0L
, контур для всех значений w
категориальных
![enter image description here](https://i.stack.imgur.com/M13X3.png)
(Простите за мои поспешные навыки в GIMP. В реальных данных контуры, скорее всего, не будут пересекаться, но я не думаю, что это будет проблемой.)
Реальные данные имеют разные значения (и градиенты) z
для одной и той же системы X, Y, поэтому в остальном контур совместим с первым фасетом. Тем не менее, он все еще «другой», поэтому я не могу смоделировать контуры с единственными w==0L
данными.
Я думаю, что может быть несколько способов сделать это:
- формирует данные «правильно» в первый раз, сообщая
ggplot
, как вычерчивать контуры, но укладывая их на одном графике (например, используя разные data=
для определенных слоев);
- формируют граненый график, извлекают контуры из других граней, применяют их к первому и отбрасывают другие фасеты (возможно, используя
grid
и / или gtable
); или возможно
- (математически рассчитать контуры самостоятельно и добавить их как независимые линии; я надеялся повторно использовать усилия
ggplot2
, чтобы избежать этого ...).