当前位置: 首页 > news >正文

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有时候操作起来也不是很方面。

http://www.cnnetsun.cn/news/25841.html

相关文章:

  • 【收藏必备】企业AI落地5大挑战:AI产品经理实战指南
  • 电商平台Redis缓存管理实战案例
  • 5分钟快速上手GPT-2 XL:新手必看的完整指南
  • AI助力开发:用VSCode摸鱼插件提升编程效率
  • 如何零基础搭建本地AI搜索引擎:从Google依赖到自主掌控
  • AI如何帮你快速搭建RAID10存储系统?
  • GC5035图像传感器深度解析与完整指南
  • 终极串口调试助手:RS485/RS232设备测试完全指南
  • 【YOLO11-MM 多模态目标检测】交叉CrossTransformerFusion特征融合、抛弃Concat、实现全局把控
  • 1小时验证创意:蓝牙水控器原型开发全记录
  • 5分钟快速验证:用Docker在Ubuntu搭建Python数据分析环境
  • VCU应用层模型:实车量产中独立功能模型的编译支持
  • Sanic框架CLI参数解析异常深度解析与修复指南
  • 效率对比:传统vs AI辅助开发Vue-Baidu-Map
  • Bodymovin/Lottie完整教程:从零开始掌握动画导出与渲染
  • Figma汉化插件实战:跨国团队协作的救星
  • 永磁同步电机控制玩的就是环套环的把戏,今天咱们拆解一套RSMDO+DBCC组合拳。这玩意儿在工业现场对付参数变化和负载扰动特别带劲,不信你看完下面的代码实操
  • 2024年CUPT技术探索:水滴透镜comsol仿真技术与实际应用分析
  • Linux小白也能懂:fcitx5中文输入法安装使用图解
  • 用AI构建导师评价系统:5分钟开发全流程
  • AI图像修复工具深度优化指南:从基础应用到专业调优
  • AI一键生成Oracle安装脚本,告别复杂配置
  • 实用Node-RED编程:从零到精通的完整学习指南
  • OpenAI Whisper Turbo模型实战部署:从零到一构建高效语音转写系统
  • 企业级项目中依赖注入错误的5个真实案例解析
  • MES信息化智能化解决方案,MES实施方案
  • UE5 材质-28-各种节点:三输出的 if 节点,借助于 time 节点和 Frac(只取小数部分)得到纹理的溶解效果。 也可用于测试 TextureCoordinate 节点的输出向量的值是什么
  • UE5 材质-29-各种节点:
  • 有什么好的团队文件管理软件?测评对比14款
  • CV技术的应用现状与CNN模型识别图像中对象的流程