ggplot2回顾(12): 一页多图

library(tidyverse)
library(grid)
p1 <- mtcars%>%ggplot(aes(x=mpg,y=wt,color=factor(cyl)))+geom_point()
p2 <- diamonds%>%ggplot(aes(x=cut,fill=color))+geom_bar(position = position_dodge())
p3 <- diamonds%>%ggplot(aes(x=color,y=price))+geom_boxplot(outlier.shape = NA,fill="lightblue",alpha=0.4)+geom_violin(fill="grey",alpha=0.4)

1. 运用子图

需要使用pdf(), png()来存储,因为ggplot2自带的ggsave()只能保存一张图

pdf("test1.pdf",width = 12,height = 10)
p1 #主图
subvp <- viewport(width = 0.4,height = 0.3,x=0.75,y=0.85) #这里的长宽、定位都是相对于主图的,需要多次调整
print(p2,vp=subvp)
dev.off()

运用这种方法时,比较麻烦的地方是需要自己手动调整子图的位置。

2. 运用矩形网格

可以自由划分网格

grid.newpage()
pushViewport(viewport(layout = grid.layout(2,2))) #把画板均分为4份
vplayout <- function(x,y)
  viewport(layout.pos.row = x,layout.pos.col = y)
print(p1,vp=vplayout(1,1:2)) #1行的1,2列
print(p2,vp=vplayout(2,1)) #2行1列
print(p3,vp=vplayout(2,2)) #2行2列

以上两种方法基于grid包,是拼图最基本的方法,有点落后了,现在已经有很多包可以很人性化地拼图。

你可能感兴趣的:(ggplot2回顾(12): 一页多图)