R可视乎|用R来拼图和排版,告别AI和PS(二)
Editor's Note
The following article is from 生信交流平台 Author 生信交流平台
1.简介
当然关于拼接图形也可以通过其他包来设置:基础包的par()
和layout()
以及gridExtra包
中的grid.arrange()
和cowplot包
中的plot_grid()
。具体可见下面的推文:
前面我们简单给大家介绍了如何使用 R 包 patchwork 来拼图和排版,今天我们接着来探讨,如何在拼图和排版的时候调节宽度、高度和添加注释信息。
2.使用教程
2.1 绘制四幅图
首先,绘制四个图形作为案例图。
#加载ggplot2和patchwork
library(ggplot2)
library(patchwork)
#图A 散点图
p1 <- ggplot(mtcars) +
geom_point(aes(mpg, disp)) +
ggtitle('A')
#图B 箱型图
p2 <- ggplot(mtcars) +
geom_boxplot(aes(gear, disp, group = gear)) +
ggtitle('B')
#图C 拟合曲线
p3 <- ggplot(mtcars) +
geom_smooth(aes(hp, wt)) +
ggtitle('C')
#图D 柱形图
p4 <- ggplot(mtcars) +
geom_bar(aes(gear)) +
facet_wrap(~cyl) +
ggtitle('D')
2.2 调节宽度与高度
1.调节宽度:通过plot_layout(widths = c(2, 1)
来设置宽度比例为 2:1。
p1+p2+plot_layout(widths = c(2, 1))
注意: 你也可以直接指定图片的实际宽度为 10cm 和 5cm。跟上面指定比例的区别在于:指定比例,当绘图区域的宽度发生变化的时候,图片的宽度也会跟着发生变化,但保持比例为 2:1。如果直接指定了实际的宽度,不论你的绘图区域的宽度如何发生变化,图片的宽度始终保持不变。
p1+p2+plot_layout(widths = unit(c(10, 5), c('cm', 'cm')))
2. 调节高度:使用plot_layout(heights = c(2, 1)
调节宽度。
p1/p2+plot_layout(heights = c(2, 1))
3.同时调节高度和宽度
p1+p2+p3+p4+plot_layout(widths = c(2, 1),height=c(2,1))
其实就是合并了前面两个例子,应该也很容易理解。
4.结合空白占位图来调节宽度和高度:有时候为了图片的美观,或者为了突出重点图,我们需要结合使用空白占位图。
(plot_spacer()+p1+plot_spacer()+
plot_layout(widths = c(1,4,1)) #调节空白占位图和图A的宽度
) / (p2+p3+p4)
我们为了突出一下图 A,让他的宽度更大一些,让空白占位图的宽度更小一些。
2.3 添加注释信息
1.添加标题,修改标题字体类型和字体大小:将前三张图拼接起来,然后加上一些标题和说明文字。
patchwork <- (p1 + p2) / p3
patchwork + plot_annotation(
title = 'The surprising truth about mtcars', #主标题
subtitle = 'These 3 plots will reveal yet-untold secrets about our beloved data-set', #次标题
caption = 'Disclaimer: None of these plots are insightful' #说明文字
)
#改变标题字体为mono
patchwork +
plot_annotation(title = 'The surprising truth about mtcars') &
theme(text = element_text('mono'))
当然标题字体的大小也是可以修改
#改变标题字体大小为28
patchwork +
plot_annotation(title = 'The surprising truth about mtcars',
theme = theme(plot.title = element_text(size = 28))) &
theme(text = element_text('mono'))
2.为子图添加序号:使用tag_level = 'A'
添加序号。
#给每一副子图加上序号,tag_level选A,表示用大写字母来标注
patchwork + plot_annotation(tag_levels = 'A')
# tag_level选I,表示用大写罗马字母来标注
patchwork + plot_annotation(tag_levels = 'I')
# tag_level选1,表示用数字来标注
patchwork + plot_annotation(tag_levels = '1')
当然标号的大小也是可以修改的
#调节标号的大小为20
patchwork +
plot_annotation(tag_levels = 'A') &
theme(plot.tag = element_text(size = 20))
我们还可以自定义前缀,后缀和链接符
#标号加前缀,连接符和后缀
patchwork + plot_annotation(tag_levels = c('A', '1'), tag_prefix = 'Fig. ',
tag_sep = '-', tag_suffix = ':')
除了使用这个包里面自带的标号类型以外,我们还可以自定义标号的类型
#自定义标号,上部采用#加数字,下部采用&进行标号
patchwork +
plot_annotation(tag_levels = list(c('#', '&'), '1'))
这里标号的位置也是可以根据需要来进行调整的
#控制标号摆放的位置,以及对标号位置进行微调
patchwork +
plot_annotation(tag_levels = c('A', '1'), tag_prefix = 'Fig. ', tag_sep = '-',
tag_suffix = ':') &
#c(0,1)左上角,c(0,0)左下角,其他位置依次类推
theme(plot.tag.position = c(0, 0),
#hjust水平微调,vjust垂直微调
plot.tag = element_text(size = 14, hjust = 0, vjust = 0))
拓展
如果想进一步学习,可以参考以下几篇其他公众号的推文以及他的官网[1],Rdocumentation[2]以及PDF 教程[3]
参考资料
官网: https://www.rdocumentation.org/packages/patchwork/versions/1.1.1
[2]Rdocumentation: https://patchwork.data-imaginist.com/articles/patchwork.html
[3]PDF 教程: https://www.bing.com/search?q=patchwork%20r&qs=n&form=QBRE&sp=-1&pq=patchwork%20&sc=8-10&sk=&cvid=5B39EB1F695F44D1980802D51846501E
注:小编对原文进行了重新编排和小小的修改
既往专辑