ggplot独立的传奇人物,情节(ggplot separate legend and plot)

2019-06-18 06:36发布

我使用的网格 lpackage把我的图表,我做GGPLOT2:

library(ggplot2)
library(grid)

Layout <- grid.layout(nrow = 4, ncol = 4,
          widths = unit(1, "null"), 
          heights = unit(c(0.4, 0.8, 1.2, 1.2), c("null", "null", "null")))
grid.show.layout(Layout)

plot1 = ggplot(diamonds, aes(clarity, fill = color)) + 
            geom_bar() + 
            facet_wrap(~cut, nrow = 1)
print(plot1 + theme(legend.position = "none"), 
vp = viewport(layout.pos.row = 3, layout.pos.col = 1:4))

问题是,我希望把第三排(3,1)的情节 - (3,4),并把传说在(4,4)位置。 不幸的是,我真的不能找到一种方法来创建只是一个传说变量。 我在网上搜索,而我得到的最接近是使用旧+ opts(keep = "legend_box")但已被弃用。

旧的解决方案 。

Answer 1:

你可以从传说grob的ggplot的对象。 然后,你可以使用grid.arrange功能定位的一切。

library(gridExtra)
g_legend<-function(a.gplot){
    tmp <- ggplot_gtable(ggplot_build(a.gplot))
    leg <- which(sapply(tmp$grobs, function(x) x$name) == "guide-box")
    legend <- tmp$grobs[[leg]]
    legend
}

legend <- g_legend(plot1)

grid.arrange(legend, plot1+ theme(legend.position = 'none'), 
    ncol=2, nrow=1, widths=c(1/6,5/6))

有很多使用网络上的例子g_legend功能。

HTH



Answer 2:

这里是GGPLOT2自己的开发者提出的功能grid_arrange_shared_legend: https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs ,它的工作原理相当不错。



文章来源: ggplot separate legend and plot
标签: r ggplot2 legend