提问人:Jade131621 提问时间:3/24/2022 更新时间:12/8/2022 访问量:509
有没有办法将 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() 中控制。相关功能,但我不知道如何为我的个人地块“重新创建”这些条带标签。有人知道吗?
这是我用 facet.grid() 创建的图表
我想要在我的 grid.arrange() 生成的图中来自 facet.grid() 的灰色阴影标签。
谢谢!
答:
0赞
stefan
3/24/2022
#1
好吧,一个简单的方法是通过添加 .这样做会自动将条带文本框添加到每个子图中。在下面的代码中,我使用了一个自定义函数,并使用 .facet_grid
facet_grid
if-else
使用一些虚假的示例数据并使用 代替 :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()
0赞
Clem Snide
12/8/2022
#2
当您要求手动添加条带时(我寻找相同的条带,无法分面我的数据),以下解决方法:只需在白色矩形上方手动添加带有分组/因子名称的文本
annotate("rect", xmin = 0.8, xmax = 3.5, ymin = 29, ymax = 33,
color="black", fill = "white")+
annotate(label = "something", x= 2.15, y=31, geom="text") +
annotate("rect", xmin = 3.9, xmax = 6.5, ymin = 29, ymax = 33,
color="black", fill = "white")+
annotate(label = "something different", x= 5.25, y=31, geom="text")
你必须稍微摆弄一下定位。只要有可能,我也会使用前面提到的自动刻面。
评论
facet_grid