R包:‘patchwork合并多个R图的包‘

介绍

patchwork是基于gglot2的拼图包,它使得基于ggplot2的图形更容易拼接在同一个图层。

安装

因为作者仅仅在GitHub发布了patchwork,因此无法使用install.packages("patchwork")从CRAN处获取。为了获取该包,首先应该安装devtools包,其次在使用如下命令:

# install.packages("devtools")
library(devtools)
install_github("thomasp85/patchwork")

加载数据

使用R自带的mtcars数据,先使用ggplot2作图:

library(ggplot2)
library(patchwork)

p1 <- ggplot(mtcars, aes(x=mpg, y=disp))+ geom_point()
p2 <- ggplot(mtcars, aes(x=gear, y=disp, group = gear))+ geom_boxplot()
p3 <- ggplot(mtcars, aes(x=disp, y=qsec))+ geom_smooth()
p4 <- ggplot(mtcars, aes(x=carb))+ geom_bar()

+ 叠加图

p1 + p2 + p3 + p4
# (p1 + p2 + p3 + p4)+ plot_layout(ncol =1) # plot_layout 控制拼图水平布局

- 子轨道

# - 符号左右图形位于不同图层 
(p1 + p2 + p3) - p4 # (p1 + p2 + p3) 和p4分别占用两个相同大小的轨道
#(p1 + p2 + p3) - p4 + plot_layout(ncol=1) # 控制列数

| 水平布局

(p1 | p2 | p3 | p4) # 四个图分布在四个不同的图层
#(p1 + p2 + p3 + p4) # 四个图分布在同一个图层,且自动分成两列,每列2个图

**/**垂直布局

(p1 | p2)/(p3 | p4) # 括号内是水平布局,/则是垂直布局,和p1+p2+p3+p4类似

*& 同一操作应用所有图形

(p1 + (p2 + p3) + p4 + plot_layout(ncol = 1)) * theme_bw() # 只会应用到当前嵌套层 p1 p4

(p1 + (p2 + p3) + p4 + plot_layout(ncol = 1)) & theme_bw() # 所有图形

{} 或者 () 嵌套布局图形

p1 + {
  p2 + {
    p3 +
      p4 +
      plot_layout(ncol=1)
  }
} + 
  plot_layout(ncol=1)


p1 + (
  p2 + (
    p3 + p4 + plot_layout(ncol=1)
  )
) + 
  plot_layout(ncol=1)

plot_layout 调节拼接细节

p1 + p2 + plot_layout(ncol = 1, heights = c(2, 1))

plot_spacer 添加空白

p1 + plot_spacer() + p2

plot_annotation 设置title,subtitles 和 captions

patchwork <- (p1 + p2) / p3 # patchwork[[1]] = p1 + p2 图层1;patchwork[[1]] = 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',
  tag_levels = 'A' # 添加标签
) & theme(plot.tag = element_text(size = 8))

# 对图层1两子图编码 A1 和 A2
patchwork[[1]] <- patchwork[[1]] + plot_layout(tag_level = 'new')
patchwork + plot_annotation(tag_levels = c('A', '1'))

# 对图注进行编码 Fig.A.1: Fig.A.2: Fig.B:
patchwork + plot_annotation(tag_levels = c('A', '1'), tag_prefix = 'Fig. ',
                            tag_sep = '.', tag_suffix = ':')

控制legend

p1 <- ggplot(mtcars, aes(x=mpg, y=disp, colour = mpg, size = wt))+ 
  geom_point()
p2 <- ggplot(mtcars %>% mutate(gear=factor(gear)), aes(x=gear, y=disp, group = gear, color = gear))+
  geom_boxplot()
# 指定guides='collect',把legend都给集中在图的一侧
# guide_area() 图例单独放在一个格子
(p3 | (p1 / p2)) + 
	plot_layout(guides = 'collect') +  
  guide_area() 

总结

cowplot包相比,patchwork包更适合基于ggplot2的产生的图形,它的布局更加简洁,语法简单

参考

  1. patchwork
  2. patchwork拼图
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信学习者2

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值