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包,是拼图最基本的方法,有点落后了,现在已经有很多包可以很人性化地拼图。
网友评论