Подтвердить что ты не робот

Добавить слой геометрии для одной панели в гранжевом графике

Взяв кий из следующей ссылки Выравнивая два графика с ggplot2, мне удалось построить 2 "y" переменные, связанные с общим x ось. Теперь я хочу, чтобы добавить слой geom_point только к одному из фасетов. Этот слой использует другой набор данных (d3) с той же структурой, что и d1. Когда я добавляю слой, он используется на обеих грани. Можно ли наложить точки только на верхнюю грань.

library(ggplot2)

x <- seq(1992, 2002, by = 2)
d1 <- data.frame(x = x, y = rnorm(length(x)))
xy <- expand.grid(x = x, y = x)
d2 <- data.frame(x = xy$x, y = xy$y, z = jitter(xy$x + xy$y))
d3 <- data.frame(x = x, y = 3+rnorm(length(x)))

d1$panel <- "a"
d2$panel <- "b"
d1$z <- d1$x

d <- rbind(d1, d2)

p <- ggplot(data = d, mapping = aes(x = x, y = y))
p <- p + facet_grid(panel ~ ., scale = "free")
p <- p + layer(data = d1,  geom = c( "line"), stat = "identity")
###*p <- p + layer(data = d3,  geom = c( "point"))* - This is the layer I intend to add only to the top panel

p <- p + layer(data = d2,  geom = "line", stat = "identity")
p
4b9b3361

Ответ 1

Просто добавьте столбец panel в d3 с панелью, в которую вы хотите добавить установленную точку. В вашем случае:

d3$panel = "a"

p <- ggplot(data = d, mapping = aes(x = x, y = y))
p <- p + facet_grid(panel ~ ., scale = "free")
p <- p + layer(data = d1,  geom = c( "line"), stat = "identity")
p <- p + layer(data = d3,  geom = c( "point"))
p <- p + layer(data = d2,  geom = "line", stat = "identity")
p

который дает правильный результат:

enter image description here

Если столбец, упомянутый в вызове facet_grid, отсутствует, ggplot2 предполагает, что он должен быть напечатан на всех грани. Когда вы укажете panel, ggplot2 учтет его.