我想排列 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()
我得到这样的东西
关于如何管理整洁的安排的任何想法?
最佳答案
我总是用 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/