grid.arrange():整齐排列3个图

时间:2015-08-13 14:19:56

标签: r ggplot2

我想安排3个正方形ggplots,其中一个更大,另外两个与第一个更小。

这是我的尝试:

gg1 <- ggplot(mtcars,aes(x=hp,y=mpg))+
        geom_point(aes(color=factor(cyl)),alpha=.5)+
        stat_smooth(method='lm', se=F, color='red')+
        ggtitle('plot 1')+
        theme_bw()+
        theme(aspect.ratio=1,
              legend.position = c(1, 1), 
              legend.justification = c(1,1), 
              legend.background = element_rect(colour = NA, fill = NA))


gg2 <- ggplot(mtcars)+
        geom_density(aes(x=hp, color=factor(cyl)))+
        ggtitle('plot 2')+
        theme_bw()+
        theme(aspect.ratio=1,
              legend.position = c(1, 1), 
              legend.justification = c(1,1), 
              legend.background = element_rect(colour = NA, fill = NA))


gg3 <- ggplot(mtcars)+
        geom_density(aes(x=mpg, color=factor(cyl)))+
        ggtitle('plot 3')+
        theme_bw()+
        theme(aspect.ratio=1,
              legend.position = c(1, 1), 
              legend.justification = c(1,1), 
              legend.background = element_rect(colour = NA, fill = NA))

grid.arrange(arrangeGrob(gg1), 
             arrangeGrob(gg2,gg3, ncol=1), 
             ncol=2, widths=c(1,1))

基本上,我希望小plot2的顶部边框与大plot1的顶部边框齐平,而plot3的底部边框与plot1的底部边框齐平。 ggtitle1也应与ggtitle 2保持同等水平。

当我保存三重图(甚至保持所需的宽高比)时

png(file = 'test.png',width=900,height=600)
grid.arrange(arrangeGrob(gg1), 
             arrangeGrob(gg2,gg3, ncol=1), 
             ncol=2, widths=c(1,1))
dev.off()

我得到这样的东西

enter image description here

关于如何管理整洁安排的任何想法?

1 个答案:

答案 0 :(得分:2)

我总是将所有内容都放在带有arrangeGrob函数的变量中,并使用ggsave保存此对象。

a <- arrangeGrob(arrangeGrob(gg1), arrangeGrob(gg2,gg3, ncol=1), ncol=2, widths=c(2,1)) 
# big plot should be twice wider than two small ones
ggsave('~/Downloads/jnk.pdf',a)
ggsave('~/Downloads/jnk.png',a) #in case of png file.

请注意,使用新的gridExtra包更改了一些内容并且语法已更改,但使用版本0.9.1时,这种方法很有效。