我想排列 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()

我得到这样的东西

r - grid.arrange() : arrange 3 plots neatly-LMLPHP

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

最佳答案

我总是用 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 版本可以很好地工作。

关于r - grid.arrange() : arrange 3 plots neatly,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31990847/

10-12 17:54