Как отформатировать заголовок и записи сетки в ggplot2 :: facet_grid - PullRequest
1 голос
/ 28 мая 2020

У меня есть график с использованием facet_grid(), и я хотел бы изменить элементы сетки фасетов.

Рассмотрим следующий MWE:

library(ggplot2)
ggplot(mpg, aes(displ, cty, fill=cyl)) + 
  geom_point() +
  scale_fill_continuous() +
  facet_grid(rows = vars(drv))

Я хотел бы заменить записи 4, f и r с правой стороны каждой строки с символами (например, c("Case 1", "Case 2", "Case 3") и добавить поле заголовка справа от записей (т.е. между серый квадрат и легенда (cyl).

Документация для facet_grid мне не помогла - может ли кто-нибудь указать мне правильное направление?

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Вы также можете рассмотреть возможность добавления измененного столбца к своим данным, как показано ниже:

library(dplyr)
mpg_2 <- mpg %>%
  mutate(drv_2 = case_when(
    drv == "4" ~ "Case1",
    drv == "f" ~ "Case2",
    drv == "r" ~ "Case3" 
  ))

ggplot(mpg_2, aes(displ, cty, fill=cyl)) + 
  geom_point() +
  scale_fill_continuous() +
  facet_grid(rows = vars(drv_2))
1 голос
/ 28 мая 2020

Вам нужно будет предоставить функцию маркировки аргументу labeller в facet_grid(), который использует именованный вектор символов в качестве таблицы поиска.

library(ggplot2)
ggplot(mpg, aes(displ, cty, fill=cyl)) + 
  geom_point() +
  scale_fill_continuous() +
  facet_grid(rows = vars(drv),
             labeller = as_labeller(c("4" = "Case1", "f" = "Case2", "r" = "Case3")))

Создано 28 мая 2020 года пакетом REPEX (v0.3.0)

EDIT:

Чтобы использовать дополнительный слой полосы в качестве охватывающий заголовок, вы можете использовать facet_nested() из ggh4x (полный отказ от ответственности: я создаю этот пакет).

library(ggplot2)
library(ggh4x) #devtools::install_github("teunbrand/ggh4x")

ggplot(mpg, aes(displ, cty, fill=cyl)) + 
  geom_point() +
  scale_fill_continuous() +
  facet_nested(rows = vars("title", drv),
             labeller = as_labeller(c("4" = "Case1", "f" = "Case2", 
                                      "r" = "Case3", "title" = "My Title Here")))

Создано 28 мая 2020 г. пакет репекс (v0.3.0)

Если вы не особо заботитесь о наличии полосы, вы можете использовать дополнительную направляющую оси Y.

library(ggplot2)
ggplot(mpg, aes(displ, cty, fill=cyl)) + 
  geom_point() +
  scale_fill_continuous() +
  facet_grid(rows = vars(drv),
             labeller = as_labeller(c("4" = "Case1", "f" = "Case2", "r" = "Case3"))) +
  guides(y.sec = guide_none("My Title Here"))

Создано 28 мая 2020 года пакетом REPEX (v0.3.0)

...