强烈建议你读了前两节后,再来读次教程
R高级|利用cowplot包拼接图片(2)巧用NULL调节距离、排版
这次我们来讲overlap:图层叠加。我们要画下面这张图
有2种思路:
1、利用NULL,调节两张图片的位置,让两张图片靠近,距离为-1
2、像PS软件那样,图层一层一层叠加
0、准备3张图片A、B、B_black
图片A
library(ggplot2)
library(cowplot)
mpg$year = as.character(mpg$year)
A <- ggplot(mpg,aes(year,hwy)) +
geom_boxplot(outlier.colour = NA,width=0.2)+
theme_half_open()
A
图片B
B<-ggplot(mpg,aes(year,hwy)) +
geom_dotplot(binaxis = 'y',stackdir='center',
dotsize = 0.3,
stackratio=1,fill='red',color='red') +
theme_half_open()
B
B_black是图B去除了坐标轴上标题、标签、坐标线
B_black<-ggplot(mpg,aes(year,hwy)) +
geom_dotplot(binaxis = 'y',stackdir='center',
dotsize = 0.3,
stackratio=1,fill='red',color='red') +
theme_half_open() +
theme(axis.text = element_blank(),
axis.title = element_blank(),
axis.ticks = element_blank())
B_black
1、利用NULL
将2张图拼在一起
plot_grid(A,NULL,B,nrow=1)
水平对齐
plot_grid(A,NULL,B,nrow=1,
align = 'h')
调节rel_width,默认3列的相对宽度都是1,调节第2列的相对宽为0
plot_grid(A,NULL,B,nrow=1,
align = 'h',
rel_widths = c(1,0,1))
调节第2列的相对宽为-1
plot_grid(A,NULL,B,nrow=1,
align = 'h',
rel_widths = c(1,-1,1))
设置垂直对齐,align='hv'
plot_grid(A,NULL,B,nrow=1,
align = 'hv',
rel_widths = c(1,-1,1))
2、叠加图层
使用align_plots将图片对齐
pl=align_plots(A,B_black)
View(pl)
我们可以看到,pl是一个list,长度是2,提取第1个元素命令是pl[[1]],也就是图A,提取第2个元素命令是pl[[2]],也就是图B_black。
我们使用ggdraw产生一个空图层,然后使用draw_plot,往这个图层上面一点一点加
产生空图层
ggdraw()
加图片A
ggdraw()+
draw_plot(pl[[1]])
加图片B_black
ggdraw()+
draw_plot(pl[[1]]) +
draw_plot(pl[[2]])
我们看到2附图的x轴和y轴都没有对齐,我们在align_plots命令中加入对齐参数,然后再画图
水平对齐align = 'h'
pl=align_plots(A,B_black,align = 'h')
ggdraw()+
draw_plot(pl[[1]]) +
draw_plot(pl[[2]])
垂直对齐align = 'hv'
pl=align_plots(A,B_black,align = 'hv')
ggdraw()+
draw_plot(pl[[1]]) +
draw_plot(pl[[2]])
小结一下:
第1种思路:在2个图像之间添加NULL,然后调整NULL对应列的rel_widths为-1,设置2附图水平、垂直对齐。这个在少量图片的时候是可取的,当图片比较多的时候,就不灵了。
第2种思路:先使用align_plots设置2附图为垂直、水平对齐,使用ggdraw命令画1个空画布,然后使用draw_plot命令不断往上加,这个像极了PS中的操作,也和ggplot2风格一样。
3、overlap(2)
overlap到这里还没有结束,因为我们还没有画《R高级|利用cowplot包拼接图片(2)巧用NULL调节距离、排版》中最后的一幅图。
这幅图的overlap并没有将x轴和y轴对齐,而是将图片缩小、然后放在右上角,所以,我们并不要align_plot对齐x轴和y轴,直接使用ggdraw和draw_plot即可。
ggdraw()+
draw_plot(A) +
draw_plot(B,
scale = 0.22,
x=0.35,
y=0.3)
总结:
到目前为止,我们花了3节内容,来讲解cowplot包拼图的2种模式
1、plot_gird命令,图片排版,结合NULL,可以灵活调节图片之间的距离,当NULL对应的相对宽度或相对高度为负数值,可以实现图片的overlap
2、使用ggdraw和draw_plot,来实现图层的叠加,如果需要图片的x轴和y轴都对齐的话,那么需要使用图片对齐命令align_plots,对图片进行对齐,生成一个list,然后再画图。