news 2026/5/30 5:21:49

patchwork:正经生信人拼图谁用AI啊?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
patchwork:正经生信人拼图谁用AI啊?

01写在前面

最近画了几张热图,准备拿AI拼一拼(没错我就是那个不正经的生信人),无奈图片太大,AI读进去就卡的动不了,被迫只能用R语言拼图,不过patchwork用起来是真香,基本上你在R中可以完成数据分析到排出文章Figure的所有操作,大家可以感受一下。

02教学视频

大家可以先做一做R语言基础小测验,看看自己是否需要跟我们5.5h入门R语言的课程。

先上教程视频,B站同步播出:

https://www.bilibili.com/video/BV1miNVeWEkw

完整视频回放和答疑服务可见:5.5h入门R语言

03Patchwork

假如我有这么四张图

if(!require(patchwork))install.packages('patchwork') ## 载入需要的程辑包:patchwork library(ggplot2) p1 <- ggplot(mtcars) + geom_point(aes(mpg, disp)) + ggtitle('Plot 1') p1

p2 <- ggplot(mtcars) + geom_boxplot(aes(gear, disp, group = gear)) + ggtitle('Plot 2') p2

p3 <- ggplot(mtcars) + geom_point(aes(hp, wt, colour = mpg)) + ggtitle('Plot 3') p3

p4 <- ggplot(mtcars) + geom_bar(aes(gear)) + facet_wrap(~cyl) + ggtitle('Plot 4') p4

最基本的排版用法

p1+p2#要加载patchwork,不然会显示数值相加的错误

p1 + p2 + labs(subtitle = 'This will appear in the last plot')#加上副标题

p1+p2+p3+p4#默认情况下patchwork会让图片尽量的方正一些,所以四张图自然会以2*2的形式呈现

p1 + p2 + p3 + p4 + plot_layout(nrow = 3, byrow = FALSE)#设置将图片摆成三行

p1 + p2 + p3 + p4 + plot_layout(ncol = 3)#设置将图片摆成三列

#如果你觉得加号+设置行列的形式不够灵活,你想把某些特定的图片放在一列或一行 p1|p2#放在一行

p1/p2#放在一列

p1|(p2/p3)#组合拳

加入标题与文字注释

#添加标题 (p1 | (p2 / p3)) + plot_annotation(title = '组合拳加标题')#加标题

p1 + p2 + p3 + plot_annotation(title = 'The surprising truth about mtcars', theme = theme(plot.title = element_text(size = 18))) & theme(text = element_text('mono'))#调整标题的大小与风格

#添加文字注释的方式有很多 p1 + p2 + p3 + plot_annotation(tag_levels = 'I')#比如可以一键式加上Fig legend

###下面两个是我猜的,真的有这种功能哈哈哈 p1 + p2 + p3 + plot_annotation(tag_levels = 'A')#用字母式的Fig legend

p1 + p2 + p3 + plot_annotation(tag_levels = 'A') & theme(plot.tag = element_text(size = 8))#大小也是可以调整的

p1 + p2 + p3 + plot_annotation(tag_levels = 'A') & theme(plot.tag = element_text(size = 18))#大小也是可以调整的

p1 + p2 + p3 + plot_annotation(tag_levels = '1')#用数字式的Fig legend

#可以组合式的添加Fig legend,并且可以拥有前缀 p1 + p2 + p3 + plot_annotation(tag_levels = c('A', '1'), tag_prefix = 'Fig. ', tag_sep = '.', tag_suffix = ':')

#感受一下title、subtitle、caption有何不同 p1 + p2 + plot_annotation( title = 'The surprising truth about mtcars', subtitle = 'These 3 plots will reveal yet-untold secrets about our beloved>

一些进阶布局的方法

#加入空图 p1 + plot_spacer() + p2 + plot_spacer() + p3 + plot_spacer()

(p1 + plot_spacer() + p2) / (plot_spacer() + p3 + plot_spacer())#在上面的组合拳中加空图

p1 + p2 + p3 + p4 + plot_layout(widths = c(2, 1))#图片的不均等布局,左右之间按2:布局

p1 + p2 + p3 + p4 + plot_layout(widths = c(2, 1), heights = unit(c(5, 1), c('cm', 'null')))#同理还可以上下之间按比例布局

#如果你有更复杂的需求,你可以自定义布局的样式,记住,layout要写成四方的样子,空的地方用#替代 layout <- " ##BBBB AACCDD ##CCDD " p1 + p2 + p3 + p4 + plot_layout(design = layout)

#如果你觉得上面的AABB有些混乱,你不能理解,那么你可以这样指定 layout <- ' A#B #C# D#E ' wrap_plots(D = p1, C = p2, B = p3, design = layout)

#布局还可以用这种局部的方式指定,这种方法的好处是图片可以堆叠在同一位置(重叠) layout <- c( area(t = 2, l = 1, b = 5, r = 4), area(t = 1, l = 3, b = 3, r = 5) ) p1 + p2 + plot_layout(design = layout)

#与两张图片部分区域重叠相类似,你还可以将一张图片插入到另一张图片中 p1 + inset_element(p2, left = 0.6, bottom = 0.6, right = 1, top = 1)

p1 + inset_element(p2, left = 0, bottom = 0.6, right = 0.4, top = 1, align_to = 'full')

p1 + inset_element( p2, left = 0.5, bottom = 0.5, right = unit(1, 'npc') - unit(1, 'cm'), top = unit(1, 'npc') - unit(1, 'cm') )

#插入一个图注这种需求还是挺常见的 p3 + inset_element(p1, left = 0.5, bottom = 0, right = 1, top = 0.5, on_top = FALSE, align_to = 'full')

#接下来这个操作有点神奇,可以将图里的图注提取出来展示在大图的右侧 p1 + p2 + p3 + p4 #不提取

p1 + p2 + p3 + p4 + plot_layout(guides = 'collect')#提取图注

#细节一点,你还可以指定布局中每个元素是否需要提取图注: ((p2 / p3 + plot_layout(guides = 'auto')) | p1) + plot_layout(guides = 'collect')

#如果你不满足于仅将图注展示在大图右侧,你想给图注一个单独的空间: p1 + p2 + p3 + guide_area() + plot_layout(guides = 'collect')

看的出来patchwork的功能还是很强大的,最大的优点是不用忍受AI的卡顿。当然了,该用AI的时候还是用AI,Patchwork有时候操作起来也不是很方面。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 0:41:18

Calibre电子书管理终极教程:从入门到精通的完整指南

在数字阅读时代&#xff0c;你是否曾经遇到过这样的困境&#xff1a;Kindle只能阅读MOBI格式&#xff0c;而你的收藏却是EPUB&#xff1b;PDF文档在手机上看太小&#xff0c;想要转换却无从下手&#xff1f;今天&#xff0c;我将带你深入了解Calibre——这个被誉为电子书管理的…

作者头像 李华
网站建设 2026/5/23 6:55:34

Descript Audio Codec终极指南:如何实现90倍无损音频压缩

Descript Audio Codec终极指南&#xff1a;如何实现90倍无损音频压缩 【免费下载链接】descript-audio-codec State-of-the-art audio codec with 90x compression factor. Supports 44.1kHz, 24kHz, and 16kHz mono/stereo audio. 项目地址: https://gitcode.com/gh_mirrors…

作者头像 李华
网站建设 2026/5/30 2:36:54

Java正则表达式图解入门:零基础到实战

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 制作一个交互式Java正则表达式学习应用&#xff0c;包含&#xff1a;1)语法图解动画(如.*?的贪婪/懒惰模式演示) 2)实时练习沙盒 3)常见模式速查表 4)错误诊断提示 5)渐进式难度练…

作者头像 李华
网站建设 2026/5/23 6:49:31

AI助手教你3步搞定DBeaver连接MySQL

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个DBeaver连接MySQL的配置助手应用。功能包括&#xff1a;1) 自动检测本地MySQL服务 2) 根据用户输入生成标准连接字符串 3) 提供常见错误解决方案 4) 支持保存多个连接配置 …

作者头像 李华
网站建设 2026/5/15 17:41:02

Readest电子书批量转换:一键解决多格式阅读难题

你是否曾因电子书格式不兼容而烦恼&#xff1f;从PDF到EPUB&#xff0c;从MOBI到TXT&#xff0c;不同设备需要不同格式&#xff0c;手动转换既耗时又费力。现在&#xff0c;Readest的批量转换功能让这一切变得简单高效。 【免费下载链接】readest Readest is a modern, feature…

作者头像 李华