Как мне огранить geom / layer в ggplot2? - PullRequest
0 голосов
/ 23 мая 2019

Я надеюсь воссоздать вывод gridExtra ниже с помощью ggplot facet_grid, но я не уверен, какая переменная ggplot идентифицирует слои на графике.В этом примере есть два geoms ...

require(tidyverse)

a <- ggplot(mpg)
b <- geom_point(aes(displ, cyl, color = drv))
c <- geom_smooth(aes(displ, cyl, color = drv))
d <- a + b + c

# output below
gridExtra::grid.arrange(
  a + b,
  a + c,
  ncol = 2
) 

# Equivalent with gg's facet_grid
# needs a categorical var to iter over...
d$layers
#d + facet_grid(. ~ d$layers??)

Выходные данные gridExtra, которые я надеюсь воссоздать:

enter image description here

Ответы [ 2 ]

2 голосов
/ 23 мая 2019

Хакерский способ сделать это - взять существующий фрейм данных и создать две, три, столько копий фрейма данных, сколько вам нужно, со значением, связанным с ним, для использования в фасете и последующей фильтрации. Объединение (или связывание) кадров данных вместе в один кадр данных. Затем настройте ggplot и geoms и отфильтруйте каждый geom по требуемому атрибуту. Также для фасета используйте существующий атрибут для разделения графиков.

Это можно увидеть ниже:

df1 <- data.frame(
      graph = "point_plot",
      mpg
    )
df2 <- data.frame(
    graph = "spline_plot",
    mpg
  )

df <- rbind(df1, df2)

ggplot(df, mapping = aes(x = displ, y = hwy, color = class)) +
  geom_point(data = filter(df, graph == "point_plot")) +
  geom_smooth(data = filter(df, graph == "spline_plot"), se=FALSE) +
  facet_grid(. ~ graph)

enter image description here

2 голосов
/ 23 мая 2019

Если вы действительно хотите показывать разные графики на разных фасетах, один хакерский способ - сделать отдельные копии данных и поднастроить их ...

mpg2 <- mpg %>% mutate(facet = 1) %>%
  bind_rows(mpg %>% mutate(facet = 2))

ggplot(mpg2, aes(displ, cyl, color = drv)) +
  geom_point(data = subset(mpg2, facet == 1)) +
  geom_smooth(data = subset(mpg2, facet == 2)) +
  facet_wrap(~facet)

enter image description here

...