如何格式化 ggplot2::facet_grid 中的网格标题和条目

How to format grid title and entries in ggplot2::facet_grid

我有一个使用 facet_grid() 的图,我想修改分面网格的条目。

考虑以下 MWE:

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

我想用字符替换每行右侧的条目4fr (例如 c("Case 1", "Case 2", "Case 3") 添加 条目右侧的标题框(即灰色框和图例之间 (cyl)。

facet_grid 的文档对我没有帮助 - 有人能给我指出正确的方向吗?

您必须为 facet_grid() 中的 labeller 参数提供标记函数,它使用命名字符向量作为查找 table.

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

reprex package (v0.3.0)

于 2020-05-28 创建

编辑:

要使用额外的条带层作为跨越标题,您可以使用来自 ggh4x 的 facet_nested()(完全免责声明:我构建了那个包)。

library(ggplot2)
library(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")))

reprex package (v0.3.0)

于 2020-05-28 创建

如果您不是特别关心那里的条带,您可以使用辅助 y-axis 指南。

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

reprex package (v0.3.0)

于 2020-05-28 创建

您还可以考虑向数据中添加一个变异列,如下所示:

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