查看原文
其他

R可视乎|用R来拼图和排版,告别AI和PS(二)

Editor's Note

继续研究patchwork包。注:小编对原文进行了重新编排和小小的修改

The following article is from 生信交流平台 Author 生信交流平台

1.简介

当然关于拼接图形也可以通过其他包来设置:基础包的par()layout()以及gridExtra包中的grid.arrange()cowplot包中的plot_grid()。具体可见下面的推文:

R 可视乎|合并多幅图形

R 可视乎| 混合多个图形

前面我们简单给大家介绍了如何使用 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(21))

注意: 你也可以直接指定图片的实际宽度为 10cm 和 5cm。跟上面指定比例的区别在于:指定比例,当绘图区域的宽度发生变化的时候,图片的宽度也会跟着发生变化,但保持比例为 2:1。如果直接指定了实际的宽度,不论你的绘图区域的宽度如何发生变化,图片的宽度始终保持不变。

p1+p2+plot_layout(widths = unit(c(105), c('cm''cm')))

2. 调节高度:使用plot_layout(heights = c(2, 1)调节宽度。

p1/p2+plot_layout(heights = c(21))

3.同时调节高度和宽度

p1+p2+p3+p4+plot_layout(widths = c(21),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(00),
        #hjust水平微调,vjust垂直微调
        plot.tag = element_text(size = 14, hjust = 0, vjust = 0))

拓展

如果想进一步学习,可以参考以下几篇其他公众号的推文以及他的官网[1]Rdocumentation[2]以及PDF 教程[3]

参考资料

[1]

官网: 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


注:小编对原文进行了重新编排和小小的修改


既往专辑



您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存