有没有办法将 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()
据我了解,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()