我正在尝试合并一系列22个地块的图例,但我根本无法使其发挥作用。
我的传说代表几个月,每个情节都不同,有些只是几个月中的信息。
因此,最后的图例仅显示我的第一个绘图的图例(仅包含2个月的数据),而我没有其他包含所有月份数据的图可用于完成图例。
有什么办法解决这个问题?
尝试一下: ggarrange(p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12, p13,p14,p15,p16,p17,p18,p19,p20,p21,p22, ncol = 6,nrow = 4,common.legend = TRUE,legend =“ bottom”)
https://oregonstate.box.com/s/gxgo93mpva9wdx9lcfem26cer8ixpcs8
答案 0 :(得分:0)
为了更好地理解障碍,您提供了一些可重现的示例很有趣,但是通过您的文字,我认为可以理解问题的基本知识。
最近我看到了类似的东西,并且设法以一种不太优雅的方式解决了。
从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
,但不一定需要共享图例。我建议使用plot_grid
参数(link)来观察cowplot
包的align = "hv"
函数。
objx
),以使其具有最复杂的标题,并满足您的所有兴趣点。对于此对象,应该使用带有cowplot
(link)函数的get_legend
包来获取其标题。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
最终可能会发生对齐错误,但是如果耐心等待并测试软件包,您肯定会获得良好的结果。