【问题标题】:How to format grid title and entries in ggplot2::facet_grid如何在 ggplot2::facet_grid 中格式化网格标题和条目
【发布时间】:2020-05-28 12:33:56
【问题描述】:

我有一个使用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")add 条目右侧的标题框(即在灰色框和图例之间 (cyl)。

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

【问题讨论】:

    标签: r ggplot2 facet-grid


    【解决方案1】:

    您必须为facet_grid() 中的labeller 参数提供标签函数,该函数使用命名字符向量作为查找表。

    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 年 5 月 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 年 5 月 28 日创建

    如果您不是特别在意条带,您可以使用辅助 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"))
    

    reprex package (v0.3.0) 于 2020 年 5 月 28 日创建

    【讨论】:

    • 太棒了,谢谢。有没有办法在灰色框和cyl 图例之间为这三个案例添加一个“标题”框?
    • 像一个额外的总体带?
    • 没错,就像一条覆盖所有案例的灰色条带(动态地;我的真实情节中有多个“案例”)...
    • @teunbrand 请考虑将有关“总体”的“后续问题”放在单独的问答中。这与网格标题命名无关。在我看来,您的附录值得正确的条目,并且将更容易搜索正在寻找它的人。
    • @KoenV 我认为人们通常会通过这个答案找到它stackoverflow.com/a/55911134/11374827
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-29
      • 2021-05-23
      • 2020-10-13
      • 2017-02-25
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多