为了更好地理解障碍,有趣的是你提供了一些可重复的例子,但通过你的文字我认为可以理解你的问题的基础。
最近我看到了类似的东西,并设法以一种不太优雅的方式解决了。
- 在没有图例的情况下组织所有情节。
从p1
到p22
与show.legend = FALSE
对应您绘图集中的每个“行”(nrow
)。然后转换成grob
。
library(cowplot)
obj1 <- cowplot::plot_grid(p1, ..., p6, align = "hv", nrow = 1)
obj2 <- cowplot::plot_grid(p7, ..., p12, align = "hv", nrow = 1)
obj3 <- cowplot::plot_grid(p13, ..., p18, align = "hv", nrow = 1)
obj4 <- cowplot::plot_grid(p19, ..., p22, NULL, NULL, align = "hv", nrow = 1)
g1grob <- ggplot2::ggplotGrob(obj1)
g2grob <- ggplot2::ggplotGrob(obj2)
g3grob <- ggplot2::ggplotGrob(obj3)
g4grob <- ggplot2::ggplotGrob(obj4)
您可以继续使用ggarrange
,但不一定介意您需要分享图例。我建议使用align = "hv"
参数(link)观察cowplot
包的plot_grid
函数。
- 您需要创建一个对象 (
objx
),以便它具有最复杂的标题,解决您所有的兴趣点。对于这个对象,您应该使用带有get_legend
(link) 函数的cowplot
包获取其标题。
objx <- ggplot2::ggplot(df) +
... +
theme(legend.position = "bottom")
legend <- cowplot::get_legend(objx)
- 完成此操作后,只需将感兴趣的对象、情节 (
obj
) 和图例 (legend
) 结合起来。
lay <- rbind(c(1, 1, 1, 1, 1, 1),
c(2, 2, 2, 2, 2, 2),
c(3, 3, 3, 3, 3, 3),
c(4, 4, 4, 4, 4, 4))
plot_leila <- gridExtra::grid.arrange(g1grob, g2grob, g3grob, g4grob,
layout_matrix = lay)
lay <- rbind(c(rep(1,12)),
c(2))
plot_leila <- gridExtra::grid.arrange(plot_leila, legend,
layout_matrix = lay)
plot_leila
最终可能会出现错位,但只要耐心并测试软件包,您一定会得到一个好的结果。