跨越多个列的ggplot方面

时间:2021-07-05 19:36:44

标签: r ggplot2 facet

有没有办法让 ggplot2::facet_wrap() 在多行上有一个分面跨度?

我正在考虑与使用 {patchwork} (example) 可以实现的非常相似的事情。

这是一个非常蹩脚的例子,有 3 个方面:

library(tidyverse)
mtcars %>% 
  select(cyl, am, gear, carb) %>% pivot_longer(-cyl) %>% 
  ggplot(aes(fill=name, x=value)) + 
  geom_bar(position="dodge") +
  facet_wrap("cyl", scale="free")

reprex package (v2.0.0) 于 2021 年 7 月 5 日创建

在这个例子中,我怎么能在 2 行上有这些方面,第一个 cyl==4&6 在 1 列上,然后 cyl==8 将跨越 2 列?

这是我的预期输出(当心我强大的 MS Paint 技能): enter image description here

1 个答案:

答案 0 :(得分:2)

我最近在 github 上的 ggh4x 中放置了一个 manual facets 函数。它使您几乎可以完全按照预期的输出进行操作。 (免责声明:我是 ggh4x 的作者)

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

mtcars %>% 
  select(cyl, am, gear, carb) %>% 
  pivot_longer(-cyl) %>% 
  ggplot(aes(fill=name, x=value)) + 
  geom_bar(position="dodge") +
  facet_manual("cyl", scale="free", design = matrix(c(1,3,2,3), 2, 2))

reprex package (v1.0.0) 于 2021 年 7 月 13 日创建

附言因为这个 facet 函数是新的,它可能有一些我不知道的错误。如果你找到一些请告诉我。