Можете ли вы указать разные geoms для разных аспектов в ggplot?

Как вы указываете разные geoms для разных аспектов в ggplot?

(Спросил от имени @pacomet, кто хотел знать.)

2 ответа

Решение

Вот другой подход путем подбора данных:

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))

введите описание изображения здесь

Вот некоторые примеры данных с 5 группами (g). Мы хотим другой тип geom в пятом аспекте. Обратите внимание на хитрость создания двух разных версий 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,

Другие вопросы по тегам