速绘丨GO富集气泡图绘制方法,利用R语言ggplot2包快速绘制,完整脚本可重复绘图

简介: 速绘丨GO富集气泡图绘制方法,利用R语言ggplot2包快速绘制,完整脚本可重复绘图

速绘 丨 GO富集气泡图

本期分享一个快速绘制GO富集结果图的方法,主要使用R语言tidyverse包,只需导入数据即可一步出图,可以自定义显示的数目、颜色、筛选参数,从此以后绘制GO富集图只需1秒

前言介绍

下面是一个GO富集分析的结果数据表:

  • ID:表示具体的GO条目
  • Description:GO条目的描述
  • RatioF:分子是富集到这个GO条目上的gene的数目, 分母是所有输入的做富集分析的gene的数目
  • RatioB:分母是所有编码蛋白的基因中有GO注释的gene的数目,分子是注释到这个GO条目上面的gene数目
  • pvalue:富集的p值
  • p.adjust:校正之后的p值

通过以上数据可以绘制如下的气泡图,还可以进一步根据结果分成三类:

  • BP: biological process, 生物学过程
  • MF: molecular function, 分子功能
  • CC: cellular component, 细胞成分下面开始正式的绘图方法原理介绍

绘图方法

加载数据与参数

# 本脚本用于对TGT生成的GO结果作图
library(tidyverse)
rm(list=ls())
# 设置项目基本信息
file <- "GO-Table20230629105106.csv"  #数据文件名
job <- "20230629" #项目名称
out_info_num <- 30 #最大显示条目数
my_pvalue <- 1 #p值筛选条件
my_number <- 0 #数量筛选条件
color_1 <- c("blue","red") #颜色

将数据导入df变量中,然后修改colnames,使用管道操作符%>%对数据框进行筛选。首先,根据"Pvalue"列的值小于my_pvalue变量的值,保留满足条件的行。然后,继续筛选,仅保留"Number"列的值大于my_number变量的值的行。最终,经过筛选后的结果会存储回df数据框中。

df <- read.csv(file,header = T)
colnames(df) <- c("ID",
                  "Description",
                  "RatioF",
                  "RatioB",
                  "Pvalue",
                  "FDR",
                  "Number",
                  "Group",
                  "Gene")
df$Description <- factor(df$Description)
df <- df %>% filter(Pvalue < my_pvalue) %>% 
         filter(Number > my_number)

数据转换

调用分数转小数的函数,mixedToFloat相关介绍请见上一篇文章

df$RatioF <- mixedToFloat(df$RatioF)
df$RatioB <- mixedToFloat(df$RatioB)

首先,根据"RatioF"列的值对df进行升序排序,并将结果存储在df_plot中。

然后,从df_plot中提取"Description"列的唯一值,并将其存储在leve_des变量中。

接下来,将df_plot中的"Description"列转换为因子类型,并按照leve_des中的顺序设置水平值(levels)。

随后,从df_plot中保留前out_info_num行的数据,并将结果重新赋值给df_plot。这样就实现了对df_plot的行数限制。

最后,使用管道操作符%>%对df_plot进行操作,将所有含有缺失值的行删除,并将结果重新赋值给df_plot。

df_plot <- df[order(df$RatioF),]
leve_des <- unique(df_plot$Description)
df_plot$Description <- factor(df_plot$Description,levels = leve_des)
df_plot <- df_plot[1:out_info_num,]
df_plot <- df_plot %>% drop_na()

另外,需要对Group列进行替换,生成新的分类标注信息“MF”,“CC”,“BP”

# 使用mutate函数替换Group列的值
df_plot <- df_plot %>% 
  mutate(Group = case_when(
    Group == "molecular_function" ~ "MF",
    Group == "cellular_component" ~ "CC",
    Group == "biological_process" ~ "BP",
    TRUE ~ Group
  ))

绘制图像

接下来,使用ggplot2绘制气泡图:

ggplot(df_plot)+
  geom_point(aes(RatioF,Description,
                 color = Pvalue,
                 size = Number))+
  labs(x="GeneRatio",y="GO description") + 
  labs(title="")+
  scale_color_gradient(low = color_1[1],high=color_1[2],name="Pvalue")+
  theme_bw()+
  facet_grid("Group",scales = "free_y",space = "free_y")
ggsave(str_c("Fig_GO_plot_",job,".pdf"),
       width = 8,height = 8)

首先,使用geom_point函数在散点图中绘制数据点。散点的x轴表示RatioF,y轴表示Description。点的颜色基于Pvalue列的值,大小基于Number列的值。

接下来,使用labs函数设置x轴和y轴的标签文本,以及图表的标题。

然后,使用scale_color_gradient函数设置Pvalue颜色的渐变范围,并命名为"Pvalue"。调用theme_bw函数将图表的主题样式设置为黑白。

最后,使用facet_grid函数创建一个分面图,根据"Group"列的值将图表分为多个子图。scales参数设置y轴的刻度尺和标签自由缩放,space参数设置y轴的间距。

最终,使用ggsave函数将生成的图表保存为PDF文件,文件名由"Fig_GO_plot_"、job和".pdf"拼接而成,指定了输出文件的宽度和高度。

参考资料:
https://zhuanlan.zhihu.com/p/383654316
http://wheat.cau.edu.cn/TGT/m.html?navbar=GOEnrichment

“速绘”系列专注于分享便捷实用的作图脚本,低代码实现精美科研作图。主打的就是可重复使用,换套数据一行代码即可出图!本篇文章的绘图脚本已上传至后台,回复“GO29”即可获得。

相关文章
|
6月前
|
Go 开发者
Go语言包的组织与导入 -《Go语言实战指南》
本章详细介绍了Go语言中的包(Package)概念及其使用方法。包是实现代码模块化、复用性和可维护性的核心单位,内容涵盖包的基本定义、命名规则、组织结构以及导入方式。通过示例说明了如何创建和调用包,并深入讲解了`go.mod`文件对包路径的管理。此外,还提供了多种导入技巧,如别名导入、匿名导入等,帮助开发者优化代码结构与可读性。最后以表格形式总结了关键点,便于快速回顾和应用。
283 61
|
2月前
|
Java 编译器 Go
【Golang】(1)Go的运行流程步骤与包的概念
初次上手Go语言!先来了解它的运行流程吧! 在Go中对包的概念又有怎样不同的见解呢?
161 4
|
2月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
202 1
|
5月前
|
JSON 中间件 Go
Go语言实战指南 —— Go中的反射机制:reflect 包使用
Go语言中的反射机制通过`reflect`包实现,允许程序在运行时动态检查变量类型、获取或设置值、调用方法等。它适用于初中级开发者深入理解Go的动态能力,帮助构建通用工具、中间件和ORM系统等。
314 63
|
4月前
|
缓存 监控 安全
告别缓存击穿!Go 语言中的防并发神器:singleflight 包深度解析
在高并发场景中,多个请求同时访问同一资源易导致缓存击穿、数据库压力过大。Go 语言提供的 `singleflight` 包可将相同 key 的请求合并,仅执行一次实际操作,其余请求共享结果,有效降低系统负载。本文详解其原理、实现及典型应用场景,并附示例代码,助你掌握高并发优化技巧。
341 0
|
7月前
|
Go C++
Go语言方法与接收者 -《Go语言实战指南》
本文介绍了 Go 语言中方法的相关概念和用法。方法是绑定到特定类型上的函数,包含值接收者和指针接收者两种形式。值接收者不会改变原始数据,而指针接收者可修改原始数据,且在处理大型结构体时性能更优。文章详细对比了方法与普通函数的区别,并说明了选择指针接收者的原因,如修改原始值、提升性能及保持一致性。此外,Go 支持为任意自定义类型定义方法,不仅限于结构体。最后通过表格总结了方法的核心概念和使用场景。
211 34
|
7月前
|
Go 持续交付 开发者
Go语言包与模块(module)的基本使用-《Go语言实战指南》
本章深入讲解Go语言中的包(Package)和模块(Module)概念。包是代码组织的最小单位,每个`.go`文件属于一个包,通过`import`实现复用;主程序包需命名为`main`。模块是Go 1.11引入的依赖管理机制,支持自动版本管理和私有/远程仓库,无需依赖GOPATH。通过实际示例,如自定义包`mathutil`和第三方模块`gin`的引入,展示其使用方法。常用命令包括`go mod init`、`go mod tidy`等,帮助开发者高效管理项目依赖。最后总结,包负责功能划分,模块实现现代化依赖管理,提升团队协作效率。
299 15
|
数据可视化 数据挖掘 图形学
R语言基础可视化:使用ggplot2构建精美图形的探索
【8月更文挑战第29天】 `ggplot2`是R语言中一个非常强大的图形构建工具,它基于图形语法提供了一种灵活且直观的方式来创建各种统计图形。通过掌握`ggplot2`的基本用法和美化技巧,你可以轻松地将复杂的数据转化为直观易懂的图形,从而更好地理解和展示你的数据分析结果。希望本文能够为你探索`ggplot2`的世界提供一些帮助和启发。
|
数据可视化
R语言自定义图形:ggplot2中的主题与标签设置
【8月更文挑战第30天】`ggplot2`作为R语言中功能强大的绘图包,其自定义能力让数据可视化变得更加灵活和多样。通过合理使用`theme()`函数和`labs()`函数,以及`geom_text()`和`geom_label()`等几何对象,我们可以轻松创建出既美观又富有表达力的图形。希望本文的介绍能够帮助你更好地掌握`ggplot2`中的主题与标签设置技巧。
|
Linux Go iOS开发
怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev
本文介绍了如何在 VSCode 中禁用点击 Go 包名时自动打开浏览器跳转到 pkg.go.dev 的功能。通过将 gopls 的 `ui.navigation.importShortcut` 设置为 &quot;Definition&quot;,可以实现仅跳转到定义处而不打开链接。具体操作步骤包括:打开设置、搜索 gopls、编辑 settings.json 文件并保存更改,最后重启 VSCode 使设置生效。
474 9
怎么禁用 vscode 中点击 go 包名时自动打开浏览器跳转到 pkg.go.dev

热门文章

最新文章