我有两个ggplots,我与 grid.arrange
水平对齐 . 我查看了很多论坛帖子,但我尝试的所有内容似乎都是现在更新并命名为其他内容的命令 .
我的数据看起来像这样;
# Data plot 1
axis1 axis2
group1 -0.212201 0.358867
group2 -0.279756 -0.126194
group3 0.186860 -0.203273
group4 0.417117 -0.002592
group1 -0.212201 0.358867
group2 -0.279756 -0.126194
group3 0.186860 -0.203273
group4 0.186860 -0.203273
# Data plot 2
axis1 axis2
group1 0.211826 -0.306214
group2 -0.072626 0.104988
group3 -0.072626 0.104988
group4 -0.072626 0.104988
group1 0.211826 -0.306214
group2 -0.072626 0.104988
group3 -0.072626 0.104988
group4 -0.072626 0.104988
#And I run this:
library(ggplot2)
library(gridExtra)
groups=c('group1','group2','group3','group4','group1','group2','group3','group4')
x1=data1[,1]
y1=data1[,2]
x2=data2[,1]
y2=data2[,2]
p1=ggplot(data1, aes(x=x1, y=y1,colour=groups)) + geom_point(position=position_jitter(w=0.04,h=0.02),size=1.8)
p2=ggplot(data2, aes(x=x2, y=y2,colour=groups)) + geom_point(position=position_jitter(w=0.04,h=0.02),size=1.8)
#Combine plots
p3=grid.arrange(
p1 + theme(legend.position="none"), p2+ theme(legend.position="none"), nrow=1, widths = unit(c(10.,10), "cm"), heights = unit(rep(8, 1), "cm")))
如何从这些图中提取图例并将其添加到组合图的底部/中心?
7 回答
您也可以使用ggpubr包中的ggarrange并设置"common.legend = TRUE":
更新2015年 - 2月
见Steven's answer below
这是结果图:

罗兰的答案需要更新 . 见:https://github.com/hadley/ggplot2/wiki/Share-a-legend-between-two-ggplot2-graphs
此方法已针对ggplot2 v1.0.0进行了更新 .
注意缺少
ggplot_gtable
和ggplot_build
. 改为使用ggplotGrob
. 这个例子比上面的解决方案有点复杂,但它仍然为我解决了 .我建议使用牛皮画 . 从他们的R vignette:
@Giuseppe,您可能需要考虑这个以获得灵活的图表排列规范(从here修改):
额外参数
nrow
和ncol
控制排列图的布局:如果您在两个图中绘制相同的变量,最简单的方法是将数据帧合并为一个,然后使用facet_wrap .
对于你的例子:
使用钻石数据集的另一个例子 . 这表明,如果您的图表之间只有一个共同变量,您甚至可以使其工作 .
第二个例子的唯一棘手的事情是,当你将所有内容组合成一个数据框时,因子变量会被强制转换为数字 . 理想情况下,主要是当您感兴趣的所有变量属于同一类型时,您将这样做 .
@Guiseppe:
我不知道Grobs等,但是我一起攻击了两个图的解决方案,应该可以扩展到任意数字,但它不是一个性感的函数: