在 facet_grid 中包裹一维 (ggplot2)

Wrap one dimension in facet_grid (ggplot2)

我正在使用 facet_grid 根据两个因素共同可视化数据。一个因素是太多级别无法放在一行中。因此,我想实现类似 facet_wrap 的东西,但有 2 个维度:

  1. facet_wrap可以和两个因素一起使用吗?
  2. facet_grid可以用来包裹一个因子吗?

输出应该类似于

A    B    C
.    .    .  1
.    .    .  2

D    E       
.    .       1
.    .       2

因子 1 为 5 个水平 A-E,包裹在 2 行,因子 2 为两个水平 1-2,在每一行重复。

这里有一个实际的例子可以玩:

library(ggplot2)
df <- data.frame(y=rnorm(1000), f1=rep(1:10, 100), f2=rep(1:2, each=500))
ggplot(df, aes(x=x)) + geom_histogram() + facet_grid(f2~f1)

我想将图像一分为二,五个第一层在上面,最后五个在下面,同时为每个保留第 1 行和第 2 行。

非常感谢您的考虑!

ggplot2 中没有执行此操作的内置功能,但您可以使用 gridExtra[=19 中的 grid.arrange 来近似此行为=]:

library(gridExtra)
p1 <- ggplot(df[df$f1 %in% 1:5,], aes(x=y)) + 
    geom_histogram() + 
    facet_grid(f2~f1)
p2 <- ggplot(df[df$f1 %in% 6:10,], aes(x=y)) + 
    geom_histogram() + 
    facet_grid(f2~f1)

grid.arrange(p1,p2,nrow = 2)

两个独立地块之间的对齐通常不会完美。它可以更精确地对齐,但并非没有一些努力(grid 中的详细摆弄)。