Можете ли вы указать разные геометрии для разных граней в ggplot?
Как вы указываете разные геометрии для разных граней в ggplot?
(задал вопрос от имени @pacomet, которому хотел знать.)
Ответы
Ответ 1
вот еще один подход: подмножество данных:
ggplot(mtcars, aes(mpg, disp)) + facet_wrap(~cyl) +
geom_point(data = subset(mtcars, cyl == 4)) +
geom_line(data = subset(mtcars, cyl == 6)) +
geom_text(data = subset(mtcars, cyl == 8), aes(label = gear))
![enter image description here]()
Ответ 2
Здесь приведены примеры данных с 5 группами (g
). Мы хотим, чтобы в пятом аспекте был другой тип геометрии. Обратите внимание на трюк создания двух разных версий переменной y
, один для первых четырех граней и один для пятого.
dfr <- data.frame(
x = rep.int(1:10, 5),
y = runif(50),
g = gl(5, 10)
)
dfr$is.5 <- dfr$g == "5"
dfr$y.5 <- with(dfr, ifelse(is.5, y, NA))
dfr$y.not.5 <- with(dfr, ifelse(is.5, NA, y))
Если разные геометрии могут использовать одну и ту же эстетику (например, точку и линии), это не проблема.
(p1 <- ggplot(dfr) +
geom_line(aes(x, y.not.5)) +
geom_point(aes(x, y.5)) +
facet_grid(g ~ .)
)
Однако график линии и гистограмма требуют разных граней, поэтому они не работают в соответствии с ожидаемым.
(p2 <- ggplot(dfr) +
geom_line(aes(x, y.not.5)) +
geom_bar(aes(y.5)) +
facet_grid(g ~ .)
)
В этом случае лучше сделать два отдельных графика и, возможно, объединить их с Viewport
.