从eggNOG进行GO注释到使用clusterProfiler富集分析

从eggNOG进行GO注释到使用clusterProfiler富集分析从 GO 注释到数据处理再到富集分析可视化 最详细最简单

clusterProfiler是Y叔的代表作之一,是基因富集分析的不二之选,已引用3200+,网上无数教程,我也来贡献一份,写一份最通用的小白友好型的

1 GO注释

将要进行注释的基因组蛋白序列上传到eggNOG-mapper 网站,按网站提示操作,完成后下载 query_seqs.fa.emapper.annotations文件。

2 手动处理注释结果

3 处理数据为clusterProfiler要求格式

3.1 读取注释数据并进行处理,得到背景文件。clusterProfiler要求的背景文件TERM2GENE需要包含两列,第一列为GOid,第二列为基因id;我们从eggNOG下载处理后的文件,每个基因对应多个GOid,要对其进行处理。

#载入所有所需R包 library(clusterProfiler) library(enrichplot) library(ggplot2) library(stringr) #读取数据 egg <- read.table("go_files.txt",sep="\t",header=T, stringsAsFactors = FALSE) #提取id列 gene_ids <- egg$query_name #有的基因没有注释到会显示为 "",需使用逻辑值索引去除未注释到的 eggnog_lines_with_go <- egg$GOs!= "" #将一个GeneId对应多个GOId的宽数据格式转换位长数据格式 eggnog_annoations_go <- str_split(egg[eggnog_lines_with_go,]$GOs, ",") gene_to_go <- data.frame(gene = rep(gene_ids[eggnog_lines_with_go], times = sapply(eggnog_annoations_go, length)), term = unlist(eggnog_annoations_go)) term2gene1 <- gene_to_go[, c(2, 1)] 

进一步处理,将间接注释补全,将GOid翻译为GOterm与GOontology。

#为直接注释补充为间接注释 term2gene <- buildGOmap(term2gene1) #将GoId转换为GoTerm go2term <- go2term(term2gene$GO) #将GoId转换为GoOnt go2ont <- go2ont(term2gene$GO) 

3.2 读取gene列表,感兴趣的基因存为gene1.txt文件,存为一列。

gene1 <- read.table("gene1.txt", header = FALSE, stringsAsFactors = FALSE) gene1 <- gene1$V1[1:nrow(gene1)] 

4 富集分析

使用enricher函数进行富集分析,这里设置pvalueCutoff = 1, qvalueCutoff = 1以展示所有结果。

df <- enricher(gene = gene1, TERM2GENE = term2gene, TERM2NAME = go2term, pvalueCutoff = 1, qvalueCutoff = 1) 

5 结果可视化

clusterProfiler提供了丰富的可视化方法,并支持ggplot2图形语法进行进一步修改,这里使用气泡图与网络图作为展示。

#dotplot 气泡图 #横轴为GeneRatio,代表该GO term下富集到的基因个数占列表基因总数的比例 #纵轴为富集到的GO Terms的描述信息,showCategory指定展示的GO Terms的个数 p1 <- dotplot(df, showCategory = 15 ,title = "barplot for enricher") p1 

在这里插入图片描述

#分别重新设置点的颜色,点的大小,Y轴标签的换行 p2 <- p1 + scale_color_continuous(low = "purple", high = "green") + scale_size(range = c(5, 15)) + scale_y_discrete(labels = function(y) str_wrap(y, width = 20)) p2 

在这里插入图片描述

#cnetplot 关系网络图 #barplot和dotplot都只显示了最显著的GO terms,cnetplot可显示哪些基因参与了这些terms #灰色的点代表基因,黄色的点代表富集到的GO terms #如果一个基因位于一个GO Terms下,则将该基因与GO连线 #黄色节点的大小对应富集到的基因个数,默认showCategory设置top5富集到的GO terms #设置node_label为:"category", "gene", "all"(默认), "none"来控制标签显示 p3 <- cnetplot(df, node_label = "all", showCategory = 6) p3 

在这里插入图片描述

#设置circular = TRUE展示为环形 p4 <- cnetplot(df, circular = TRUE, colorEdge = TRUE, node_label = "category", showCategory = 6) p4 

在这里插入图片描述

6 有转录组基因表达量的时候

有时候我们通过转录组测得了基因的表达量,这时候可以把表达量信息整合到分析中,体现在结果里。

#读取基因表达量文件,第一列为geneid,第二例为表达量,然后按clusterProfiler包的要求处理 d <- read.table("biaoda_files.txt", header = FALSE, sep = "\t") geneList <- d[,2] names(geneList) <- as.character(d[,1]) geneList <- sort(geneList, decreasing = TRUE) 

结果可视化的时候,可以通过添加foldChange = geneList参数将基因标签颜色与表达量相关连。

 #设置基因标签颜色与表达量相关 foldChange=geneList,并调整基因点的颜色、大小 p5 <- cnetplot(df, node_label = "all", showCategory = 6, foldChange = geneList, circular = TRUE, colorEdge = TRUE) +scale_color_continuous(low = "green", high = "red") + scale_size(range = c(5, 15)) p5 

在这里插入图片描述

p6 <- emapplot(df2,pie="count", pie_scale=1, layout="kk") p6 

在这里插入图片描述

7 多个基因集一起比较

有时候我们希望将多个基因集在一起进行比较,compareCluster函数为我们提供了这样的功能

#读入多个基因集,第二个 gene2 <- read.table("0.txt", header = FALSE) gene2 <- gene2$V1[1:nrow(gene2)] #第三个 gene3 <- read.table("50.txt", header = FALSE) gene3 <- gene3$V1[1:nrow(gene3)] #将多个基因集合并为一个list gene_cluster = list(gene1 = gene1, gene2 = gene2, gene3 = gene3) 

使用compareCluster函数进行比较分析

df2 <- compareCluster(gene_cluster, fun = 'enricher',TERM2GENE = term2gene, TERM2NAME = go2term,pvalueCutoff = 1, qvalueCutoff = 1) 

结果可视化

p7 <- dotplot(df3, showCategory = 5) + scale_y_discrete(labels = function(y) str_wrap(y, width = 50)) + scale_size(range = c(3, 10)) + scale_color_continuous(low = "purple", high = "green") p6 

在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/202424.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午7:10
下一篇 2026年3月20日 上午7:10


相关推荐

  • 简易http接口实现[通俗易懂]

    简易http接口实现[通俗易懂]http接口是什么,我一直没找到比较明确的定义(如果有哪位可以提点一下,我将非常感谢),今天就自己来总结一下吧。个人认为,http接口就是一种基于http服务的api,是系统之间交互的一种约定,所谓的webservice其实也就是一种http接口,只不过它是比较规范的、通用的。       http接口有什么用,个人体会是,http接口最主要的作用是能够较好地解决不同系统(可能是功能不同、

    2022年5月23日
    61
  • Vue创建项目详解

    Vue创建项目详解1 前提第一步 安装 node js 什么是 nodejs 简单的说 Node js 就是运行在服务端的 JavaScript Node js 是一个基于 ChromeV8 引擎的 JavaScript 运行环境 Node js 使用一个事件驱动 非阻塞式 I O 的模型 使其轻量且高效 Node js 的软件包生态系统 npm 是全球最大的开源库生态系统 为什么要安装 nodejs 安装 vue 需要使用 npm 而 npm 依赖于 node js 当然 安装 vue 也可以使用其他方法 但是都不如 npm 简单实用

    2026年3月16日
    3
  • JSONObject使用方法详解

    JSONObject使用方法详解/***项目名称:tools*项目包名:com.songfayuantools.json*创建时间:2017年7月31日上午11:58:51*创建者:Administrator-宋发元*创建地点:*/packagecom.songfayuantools.json;importcom.songfayuantools.entity.UserInfo;im

    2022年7月13日
    17
  • LMDB使用说明_ldd教程

    LMDB使用说明_ldd教程http://rayz0620.github.io/2015/05/25/lmdb_in_caffe/官方的extract_feature.bin很好用,但是输出的特征是放在LMDB里的。以前嫌LMDB麻烦,一直都图方便直接用ImageDataLayer来读原始图像。这次绕不过去了,就顺便研究了一下Caffe对LMDB的使用,一些心得写下来和大家分享一下。提取特征的内容下一篇再写。

    2026年4月18日
    5
  • ue4封装接口_ue4导出模型

    ue4封装接口_ue4导出模型原创文章,转载请注明出处。本文带大家认识UE4插件/模块的使用方式Dll。既然为DLL,那么我们就可以对其封装,做到不公开cpp的目的。1>新建一个Plugin2>在plugin中创建一个Actor类,并在里面写一个UE4的Log输出函数。3>对其进行编译,编译出不同模式的dll出来4>在UE4场景中测试我们Log函数5>删除cpp文件6>在我们的.build.cs中添加不参数编译的参数bUsePrecompiled=true;7>再到UE4场景中测试我们L

    2026年4月16日
    13
  • java当前的年月日,Java获取当前年月日

    java当前的年月日,Java获取当前年月日获取当前月第一天 paramfirstDa publicstatic Stringfirst null try SimpleDateFo newSimpleDat yyyy MM dd Calendarc Calendar getInstance 获取当前月第

    2026年3月19日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号