由于 gridExtra 的 marrangeGrob() 函数,我有一个包含 45 个 ggplot 对象的列表,我在多个页面上进行了排列。我想在每个页面上显示相同且独特的图例。
我知道如何提取图例(g_legend),如何在没有图例的情况下绘制我的 ggplot。但是由于marrangeGrob和一个独特的传说,我没有找到一种方法来拥有多页。
我使用 g_legend() 来提取我的图例
g_legend<-function(a.gplot){
g <- ggplotGrob(a.gplot + theme(legend.position = "right"))$grobs
legend <- g[[which(sapply(g, function(x) x$name) == "guide-box")]]
return(legend)}
为了简化,可复制的数据集来自菱形,假设我想在一个页面 p1 和 p2 以及另一页 p2 和 p1 上生成。
df <- count(diamonds, cut)
p1 = ggplot(df, aes(x=cut, y=n, label=format(n, big.mark=","), fill=cut)) +
geom_bar(stat="identity") +
geom_text(aes(y=0.5*n), colour="white") +
coord_flip() +
theme(legend.position="bottom")
p2 = ggplot(diamonds %>% sample_n(1000), aes(x=carat, y=price, colour=cut)) +
geom_point()
leg = g_legend(p1)
我首先尝试在一页中绘制 4 个图表
combined<-arrangeGrob(do.call("arrangeGrob",c(
lapply(list(p1,p2,p2,p1), function(x){ x + theme(legend.position="none")}),ncol=2)),
leg,
ncol = 2)
grid.newpage()
grid.draw(combined)
效果很好,但是当我尝试使用多页进行时
marrangeGrob(do.call("marrangeGrob",c(lapply(list(p1,p2,p2,p1), function(x){ x + theme(legend.position="none")}),
ncol=2,nrow=2)),
leg,
ncol = 2,nrow=1)
我得到:$<-.data.frame
( *tmp*
, "wrapvp", value = list(x = 0.5, y = 0.5, : 替换有 17 行,数据有 5
有谁知道使用 marrangeGrob 并在每个多页上获得唯一图例的方法?