问题描述
有没有办法让 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 技能):
解决方法
我最近在 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))
由 reprex package (v1.0.0) 于 2021 年 7 月 13 日创建
附言因为这个 facet 函数是新的,它可能有一些我不知道的错误。如果你找到一些请告诉我。