有没有办法将 facet.grid 类型的条带标签添加到常规图中,以便 grid.extra 中聚合的图匹配?

Is there a way to add facet.grid-type strip labels to regular plots so that plots aggregated in grid.extra match?

据我了解,facet_grid 的一大缺点是您无法指定面板组的轴限制。因此,我创建了四个图表,我添加了我想要的轴限制,并使用 gridExtra 包中的 grid.arrange 手动将它们添加在一起。但是,我希望这些图是否与我使用 face_grid 创建的其他图匹配。我认为在 facet_grid 中自动生成的条形标签在条带下的 theme() 中进行控制。相关功能,但我不知道如何为我的个人地块“重新创建”这些条带标签。有人知道吗?

这是我用 grid.arrange() 创建的图表

这是我用 facet.grid()

创建的图表

我想要我的 grid.arrange() 生成的绘图中来自 facet.grid() 的灰色阴影标签。

谢谢!

好吧,一个简单的方法是通过添加 facet_grid 对四个子图的每一个进行分面。这样做会自动将条形文本框添加到每个子图中。在我下面的代码中,我使用自定义函数并使用 if-else.

有条件地设置每个 facet_grid 的规格

使用一些假的示例数据并使用 patchwork 而不是 grid.arrange:

df <- data.frame(
  row = c("K", "r"),
  col = rep(c("Female", "Male"), each = 2),
  x = rep(1:2, each = 4),
  y = rep(1:2, each = 4)
)

# Split by facet row and col
df_split <- split(df, ~row + col)
# Order
df_split <- df_split[c("K.Female", "K.Male", "r.Female", "r.Male")]

plot_fun <- function(x, y) {
  facet_layer <- if (grepl("Female$", y) && !grepl("^r", y)) 
    facet_grid(.~col) 
  else if (grepl("Male$", y) && !grepl("^r", y)) 
    facet_grid(row~col)
  else if (grepl("Male$", y) && grepl("^r", y)) 
    facet_grid(row~.)
  
  ggplot(x, aes(x, y)) +
    geom_point() +
    facet_layer
}

library(purrr)
library(ggplot2)
library(patchwork)

purrr::imap(df_split, plot_fun) %>% 
  wrap_plots()