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

用R来拼图和排版,告别AI和PS(五):插图

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

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

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

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

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

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

今天我们来聊聊插图

首先我们还是先生成两张图

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

#加载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')

有两种方法可以实现插图的效果,

第一种方法,就是利用布局里面提到的layout来实现

代码语言:javascript
复制
#重叠
layout <- c(
  area(t = 2, l = 1, b = 5, r = 4),
  area(t = 1, l = 3, b = 3, r = 5)
)
plot(layout)

这是layout的效果图

接下来,我们替换成自己的两张图片

代码语言:javascript
复制
p1 + p2 + 
  plot_layout(design = layout)

当然也可以将图B完全插入到图A内部,先来看看效果图

代码语言:javascript
复制
#在图A右上角插入图B
layout <- c(
  area(t = 1, l = 1, b = 8, r = 8),
  area(t = 1, l = 6, b = 3, r = 8)
)
plot(layout)

在来看看实际结果

代码语言:javascript
复制
p1 + p2 + 
  plot_layout(design = layout)

第二种方法,使用pathchwork内置的inset_element函数来实现

我们还是在图A的右上角插入图B

代码语言:javascript
复制
#默认align_to为panel,只包含绘图区域
#这里的left,bottom,right,top都是按百分比计算
p1 + inset_element(p2, left = 0.6, bottom = 0.6, right = 1, top = 1)

注意inset_element有一个参数叫align_to,默认值是"panel",你可以看到图B完全在图A的绘图区域里面。下面我们再来看看,如果把这里的align_to设置成"full"会是什么效果。

代码语言:javascript
复制
#aligan_to设置为full,会包含margin区域
p1 + inset_element(p2, left = 0.6, bottom = 0.6, right = 1, top = 1,
                    align_to = 'full')

我们可以看到当align_to = 'full'的时候,这里考虑到了图A的边界区域,就是写标题"A"的区域,跟上面一张图对比,你就会发现其中的区别。

理解了这里的参数之后,想把图B插入到图A的左下角也很容易

代码语言:javascript
复制
#左下角
p1 + inset_element(p2, left = 0, bottom = 0, right = 0.6, top = 0.5)

当然,我们还可以人为定义边距的大小

代码语言:javascript
复制
#图B的上边和右边各留出1cm
p1 + inset_element(
  p2, 
  left = 0.5, 
  bottom = 0.5, 
  right = unit(1, 'npc') - unit(1, 'cm'), 
  top = unit(1, 'npc') - unit(1, 'cm')
)

到这里,我们对patchwork这个包的讲解就全部结束了,希望对大家有所帮助!

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

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

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

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

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