![](/img/trans.png)
[英]How to separate a legend to have it partly inside and outside the plot in ggplot?
[英]ggplot separate legend and plot
我正在使用网格包来放置我用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")
但已被弃用。
旧解决方案 。
你可以从传说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
ggplot2自己的开发人员建议使用grid_arrange_shared_legend函数: https : //github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs ,效果很好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.