前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用R来拼图和排版,告别AI和PS(四):布局

用R来拼图和排版,告别AI和PS(四):布局

作者头像
生信交流平台
发布2022-09-21 13:09:51
7040
发布2022-09-21 13:09:51
举报
文章被收录于专栏:用户7627119的专栏

前面我们已经通过三期的内容来讲解了如何使用R包patchwork来拼图,排版和添加注释信息。

1.用R来拼图和排版,告别AI和PS(一)

2.用R来拼图和排版,告别AI和PS(二):调节宽度和高度

3. 用R来拼图和排版,告别AI和PS(三):添加注释信息

今天我们来聊聊布局

首先我们需要先来了解一下patchwork中的area这个函数

这个函数有四个参数,t和b表示的是网格中上边界和下边界,而l和r表示的是网格中的左边界和右边界。

我们先来结合一个具体的例子来看一下这个函数的具体使用方法

代码语言:javascript
复制
#安装patchwork包
devtools::install_github("thomasp85/patchwork@v1.1.0")

#加载ggplot2和patchwork
library(ggplot2)
library(patchwork)

#定义三个区域
layout <- c(
  #如果只写两个参数,那么b = t, r = l
  area(1, 1),
  #写三个参数,那个r = l
  area(1, 3, 3),
  area(3, 1, 3, 2)
)
#画出三个区域
plot(layout)

可以看到这是一个3*3的九宫格,第一个区域top和left都是1,bottom和right也都是1,所以在左上角第一个小格子里。第二个区域top是1,left是3,bottom和right都是3,所以对应的区域是图中绿色区域。依此类推,大家可以自己推导一下第三个区域是不是蓝色所显示的区域。

了解了area这个函数以后,我们利用前几次展示的数据来看看如何布局。

代码语言:javascript
复制
#图1 散点图
p1 <- ggplot(mtcars) + 
  geom_point(aes(mpg, disp)) + 
  ggtitle('plot1')

#图2 箱型图
p2 <- ggplot(mtcars) + 
  geom_boxplot(aes(gear, disp, group = gear)) + 
  ggtitle('plot2')

#图3 拟合曲线
p3 <- ggplot(mtcars) + 
  geom_smooth(aes(hp, wt)) +
  ggtitle('plot3')

#图4 柱形图
p4 <- ggplot(mtcars) + 
  geom_bar(aes(gear)) + 
  facet_wrap(~cyl) + 
  ggtitle('plot4')

#图5 histogram
p5 <- ggplot(mtcars) + 
  geom_histogram(aes(mpg)) + 
  ggtitle('plot5')

#采用上面构建的layout来展示p1,p1和p3
p1 + p2 + p3 + plot_layout(design = layout)

是不是跟上面的布局一样,只是用我们自己的plot1,plot2和plot3来替换了原来的红,绿和蓝三个色块。

可能有些读者觉得,这个坐标有点晕,那么接下来给大家介绍一个更加简单直白的layout设置方法,可以达到相同的效果。

代码语言:javascript
复制
layout <- "
##BBBB
AACCDD
##CCDD
"

#这里plot的顺序跟上面的A,B,C和D相对应
p1 + p2 + p3 + p4 + 
  plot_layout(design = layout)

其实,这也是一个九宫格,你可以细品一下。plot2对应B的位置,占第一行,第二三列。其他依此类推。

其实这里的layout写成下面的格式是一样的效果,大家可以体会一下这两种写法的区别。实际上上面那种写法,对应的是一个3*6的网格,而下面这种写法对应的是3*3的网格。

代码语言:javascript
复制
layout <- "
#BB
ACD
#CD
"
p1 + p2 + p3 + p4 + 
  plot_layout(design = layout)

接下来大家就可以自由发挥啦,

代码语言:javascript
复制
layout <- '
##A
#B#
C##
'
wrap_plots( p1,  p2,  p3, design = layout)

比如说这种对角线排布

代码语言:javascript
复制
layout <- '
A#B
#E#
C#D
'
#注意这里的对应关系
wrap_plots(A= p3, B=p5,  C=p2, D=p1,E=p4, design = layout)

还有这种“众星捧月”的形式

如果大家理解了原理,剩下的就是你的想象力了!

参考资料:

1.用R来拼图和排版,告别AI和PS(一)

2.用R来拼图和排版,告别AI和PS(二):调节宽度和高度

3. 用R来拼图和排版,告别AI和PS(三):添加注释信息

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信交流平台 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档