news 2026/3/24 21:51:59

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/3/14 6:52:55

3D模型压缩革命:5分钟掌握Draco核心技术实战指南

3D模型压缩革命&#xff1a;5分钟掌握Draco核心技术实战指南 【免费下载链接】draco Draco is a library for compressing and decompressing 3D geometric meshes and point clouds. It is intended to improve the storage and transmission of 3D graphics. 项目地址: htt…

作者头像 李华
网站建设 2026/3/20 23:49:06

IoTSharp终极部署指南:快速构建企业级物联网平台

IoTSharp作为开源物联网平台的核心价值在于为企业提供完整的设备管理、数据采集和实时监控解决方案。通过本指南&#xff0c;您将掌握从零开始部署IoTSharp的最优路径&#xff0c;无论选择Docker容器化还是源码编译&#xff0c;都能在30分钟内完成平台搭建。 【免费下载链接】I…

作者头像 李华
网站建设 2026/3/19 13:32:59

三相DAB仿真模型分析

三相DAB仿真模型 DAB两侧均采用三相半桥结构&#xff0c;输入3kV&#xff0c;输出1kV&#xff0c;输出功率200kW且可调&#xff0c;开关频率2000Hz&#xff0c; 变压器变比为3:1。 模型采用单移相控制输出功率。双向DC-AC转换器&#xff08;DAB&#xff09;在新能源系统中扮演着…

作者头像 李华
网站建设 2026/3/13 0:22:53

3层诊断法解决DBeaver数据库对象搜索失效问题

3层诊断法解决DBeaver数据库对象搜索失效问题 【免费下载链接】dbeaver DBeaver 是一个通用的数据库管理工具&#xff0c;支持跨平台使用。* 支持多种数据库类型&#xff0c;如 MySQL、PostgreSQL、MongoDB 等&#xff1b;提供 SQL 编辑、查询、调试等功能&#xff1b;支持数据…

作者头像 李华
网站建设 2026/3/23 14:33:59

终极跨平台财富管理应用:Sossoldi完整部署指南

终极跨平台财富管理应用&#xff1a;Sossoldi完整部署指南 【免费下载链接】sossoldi "Sossoldi" is a wealth management / personal finance / Net Worth tracking app, made with Flutter. 项目地址: https://gitcode.com/GitHub_Trending/so/sossoldi 在数…

作者头像 李华
网站建设 2026/3/19 12:32:14

AI如何用Prism框架加速WPF开发?

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 使用Prism框架创建一个模块化的WPF应用程序&#xff0c;包含以下功能&#xff1a;1.主Shell窗口作为容器&#xff0c;2.多个功能模块动态加载&#xff0c;3.使用Unity作为依赖注入容…

作者头像 李华