百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

[R语言可视化-精美图形绘制系列--功能富集分析

bigegpt 2024-09-08 11:37 28 浏览

[组学分析系列的教程],前期还是整理一下前期的教程。前期自己分享了精美图形的绘制。但是,距离现在很久了,不知道有多少童鞋还会使用或回去复习。从今天开始,前期我们一起学习这个教程,我们的目标是:至少可以满足现在的自己使用!!

?

本期分享的是:功能富集分析。

?

---

?

我们童鞋最关心的一件事:如何获得绘图代码和数据!!

途径一:查看我们以前的教程

途径二给本文打赏,小杜看到后立即将本文的实例数据和代码发给你!

?

---

?

从分享自己的学习教程至今快有小一年了,我的账号都是没有使用超能力推广的,因此关注的人还是处于“小白”阶段,与我自己对自己的定义是一样的。自己的更新是不定时的,也许你会持续看到我更新,也许你很久看不到我更新文章,这都是正常状态,自己一个人的精力有限,请谅解。也希望大家可以投稿,分享自己的学习笔记。

此外,有童鞋问是否有“粉丝群”,我的天啊!我也会有一天可以建立自己的“群”!但是,现在我暂时是不会建群的!因为,自己能力有限。不能很好的帮助大家,以及建立这些群管理起来也是比较费时间的。

但是,但是,如果你愿意,可以加小杜的微信【前提:需转账50元(不介意更多)】目前,只要是小杜的微信好友,都可以直接向小杜索要每期的教程的实例数据和代码(这部分也是后期小杜“粉丝群”的首选人员,哈哈哈哈........)[微信可在公众号界面获得]

温馨提示:这个请根据自己的意愿选择,不要盲目的添加。小杜也是生信小白,也许无法提供给你想要的帮助,请理智消费

?

---

GO功能富集热图

GO网络图

网络图

通路图

---

图形绘

## clusterProfiler功能富集
## author:小杜的生信筆記


setwd("D:\\小杜的生信筆記\\clusterProfiler功能富集")
##导入相关的R包
library(stringr)
library(ggplot2)
library(clusterProfiler)
library(org.Hs.eg.db)
library(topGO)
library(enrichplot)


## 导入数据
df <- read.csv("DEGs_ID.csv", header = F)
head(df)
dim(df)
## 查看数据类型
class(df)
## 转换数据类型
df02 <- as.character(df$V1)
head(df02)
class(df02)


## symbol To entrez ID 
DEG.gene_symbol = df02
DEG.entrez_id = mapIds(x = org.Hs.eg.db,
                       keys = DEG.gene_symbol,
                       keytype = "SYMBOL",
                       column = "ENTREZID")


gene = bitr(DEG.gene_symbol, fromType="SYMBOL", 
            toType="ENTREZID", 
            OrgDb="org.Hs.eg.db")


#write.csv(gene, "SYMBOL_WNTREZID.list.csv")
head(gene)
##  GO 富集分析
ego <- enrichGO(
  gene  = gene$ENTREZID,  ## ENTREZID
  keyType = "ENTREZID",   ## 输入基因类型
  OrgDb   = org.Hs.eg.db, ## 导入背景基因
  ont     = "all",        ## GO的种类,BP,CC, MF
  pAdjustMethod = "BH",   ## 矫正的类型
  pvalueCutoff  = 0.05,   ## P值过滤值
  readable      = TRUE)


head(ego)
### GO 注释柱状图
pdf(file = "GO_bar.pdf", width = 10, height = 9)
barplot(ego, 
        drop = TRUE, 
        showCategory = 10,   ## 显示前10个GO term
        split="ONTOLOGY") +
  scale_y_discrete(labels=function(x) str_wrap(x, width=80))+
  facet_grid(ONTOLOGY~., scale='free')
dev.off()


## GO 气泡图
pdf(file = "GO_dotplot.pdf", width = 8, height = 8)
dotplot(ego, showCategory = 10)
dev.off()
# 导出GO数据
write.csv(ego, "GO.output.csv")


##------------------------------------------------------------------------------
##     GO网络图
BP_ego <- enrichGO(
  gene  = gene$ENTREZID,
  keyType = "ENTREZID",
  OrgDb   = org.Hs.eg.db,
  ont     = "BP",
  pAdjustMethod = "BH",
  pvalueCutoff  = 0.05,
  readable      = TRUE)


## BP 富集网络图
pdf("BP_网络图.pdf", width = 10, height = 10)
plotGOgraph(BP_ego)
dev.off()


### 使用simplify()函数过滤
BP_ego.filt <- simplify(BP_ego, 
                        cutoff = 0.7,
                        by = "p.adjust",
                        select_fun = min,
                        measure = "Wang",
                        semData = NULL)


head(BP_ego.filt)
pdf("BP_网络图.filt.pdf", width = 10, height = 10)
plotGOgraph(BP_ego.filt)
dev.off()


##  好看的网络图 
BP_ego <- enrichGO(
  gene = gene$ENTREZID,
  keyType = "ENTREZID",
  OrgDb = org.Hs.eg.db,
  ont = "BP",
  readable = TRUE)


## visualization
BP_ego <- pairwise_termsim(BP_ego)
pdf("好看的GO网络图.test.pdf", width = 9, height = 10)
emapplot(BP_ego, cex_label_category=.8, cex_line=.5) + 
  scale_fill_continuous(low = "#e06663", high = "#327eba", name = "p.adjust",
                        guide = guide_colorbar(reverse = TRUE, order=2.5), trans='log10') 
print(p4)
dev.off()


## use simplify to remove redundant terms
BP_ego2 <- simplify(BP_ego, cutoff=0.8, by="p.adjust", select_fun=min)
BP_ego2 <- pairwise_termsim(BP_ego2)
pdf("DK.filt04.pdf", width = 8, height = 8)
emapplot(BP_ego2, cex_label_category=.8, cex_line=.5) + 
  scale_fill_continuous(low = "#8da0cb", high = "#1b9e77", name = "p.adjust",
                        guide = guide_colorbar(reverse = TRUE, order=1.4), trans='log10')


dev.off()
## -----------------------------------------------------------------------------
## KEGG 富集分析
ekegg <- enrichKEGG(
  gene = gene$ENTREZID,
  keyType = "kegg",
  organism  = 'hsa',
  pvalueCutoff  = 0.05,
  pAdjustMethod  = "BH")


## KEGG 柱状图
pdf(file = "KEGG_bar.pdf", width = 9, height = 8)
barplot(ekegg, showCategory = 10)
dev.off()
## KEGG 气泡图
pdf(file = "KEGG_dotplot.pdf", width = 9, height = 8)
dotplot(ekegg, showCategory = 10)
dev.off()
## 导出KEGG富集分析数据
write.csv(ekegg, "KEGG.output.csv")
### -----------------
## 气泡图 更改颜色
dotplot(ekegg, showCategory = 10)+
  scale_color_gradient(low ="#e06663", high = "#327eba", name = "p.adjust" )


##
library(ggplot2)#柱状图和点状图
library(stringr)#基因ID转换
library(enrichplot)#GO,KEGG,GSEA
library(clusterProfiler)#GO,KEGG,GSEA
library(GOplot)#弦图,弦表图,系统聚类图
library(DOSE)
library(ggnewscale)
library(topGO)#绘制通路网络图
library(circlize)#绘制富集分析圈图
library(ComplexHeatmap)#绘制图例
###
GO <- enrichGO(
  gene  = gene$ENTREZID,  ## ENTREZID
  keyType = "ENTREZID",   ## 输入基因类型
  OrgDb   = org.Hs.eg.db, ## 导入背景基因
  ont     = "ALL",        ## GO的种类,BP,CC, MF
  pAdjustMethod = "BH",   ## 矫正的类型
  pvalueCutoff  = 0.05,   ## P值过滤值
  qvalueCutoff = 0.05,#设定q值阈值
  readable      = TRUE)


pdf("GO网络图.pdf", width = 20, height = 10)
enrichplot::cnetplot(GO,circular=FALSE,colorEdge = TRUE)#基因-通路关联网络图
dev.off()
pdf("KEGG网络图.pdf", width = 10, height = 10)
enrichplot::cnetplot(ekegg,circular=FALSE,colorEdge = TRUE)#circluar为指定是否环化,基因过多时建议设置为FALSE
dev.off()


## 也可以以热图形式展现关联关系:
pdf("GO富集热图.pdf", width = 20, height = 15)
enrichplot::heatplot(GO,showCategory = 20)#基因-通路关联热图
dev.off()
pdf("KEGG富集热图.pdf", width = 20, height = 15)
enrichplot::heatplot(ekegg,showCategory = 20)
dev.off()


## 富集到的功能集/通路集之间的关联网络图:
GO2 <- pairwise_termsim(GO)
KEGG2 <- pairwise_termsim(ekegg)
enrichplot::emapplot(GO2,showCategory = 50, color = "p.adjust", layout = "kk")#通路间关联网络图
enrichplot::emapplot(KEGG2,showCategory =50, color = "p.adjust", layout = "kk")


## kegg 选择通路进行展示:
browseKEGG(ekegg,"hsa04640")#选择其中的hsa05166通路进行展示


##       GO富集弦图:
write.table(GO$ONTOLOGY, "GO_ONTOLOGYs.txt", #将所有GO富集到的基因集所对应的类型写入本地文件从而得到BP/CC/MF各自的起始位置如我的数据里是1,2103,2410
            append = FALSE, quote = TRUE, sep = " ",
            eol = "\n", na = "NA", dec = ".", row.names = TRUE,
            col.names = TRUE, qmethod = c("escape", "double"),
            fileEncoding = "")




GOplotIn_BP<-GO[1:10,c(2,3,7,9)] #提取GO富集BP的前10行,提取ID,Description,p.adjust,GeneID四列
GOplotIn_CC<-GO[642:710,c(2,3,7,9)]#提取GO富集CC的前10行,提取ID,Description,p.adjust,GeneID四列
GOplotIn_MF<-GO[711:775,c(2,3,7,9)]#提取GO富集MF的前10行,提取ID,Description,p.adjust,GeneID四列
GOplotIn_BP$geneID <-str_replace_all(GOplotIn_BP$geneID,'/',',') #把GeneID列中的’/’替换成‘,’
GOplotIn_CC$geneID <-str_replace_all(GOplotIn_CC$geneID,'/',',')
GOplotIn_MF$geneID <-str_replace_all(GOplotIn_MF$geneID,'/',',')
names(GOplotIn_BP)<-c('ID','Term','adj_pval','Genes')#修改列名,后面弦图绘制的时候需要这样的格式
names(GOplotIn_CC)<-c('ID','Term','adj_pval','Genes')
names(GOplotIn_MF)<-c('ID','Term','adj_pval','Genes')
GOplotIn_BP$Category = "BP"#分类信息
GOplotIn_CC$Category = "CC"
GOplotIn_MF$Category = "MF"
circ_BP<-GOplot::circle_dat(GOplotIn_BP,genedata) #GOplot导入数据格式整理
circ_CC<-GOplot::circle_dat(GOplotIn_CC,genedata) 
circ_MF<-GOplot::circle_dat(GOplotIn_MF,genedata) 
chord_BP<-chord_dat(data = circ_BP,genes = genedata) #生成含有选定基因的数据框
chord_CC<-chord_dat(data = circ_CC,genes = genedata) 
chord_MF<-chord_dat(data = circ_MF,genes = genedata) 
GOChord(data = chord_BP,#弦图
        title = 'GO-Biological Process',space = 0.01,#GO Term间距
        limit = c(1,1),gene.order = 'logFC',gene.space = 0.25,gene.size = 5,
        lfc.col = c('red','white','blue'), #上下调基因颜色
        process.label = 10) #GO Term字体大小
GOChord(data = chord_CC,title = 'GO-Cellular Component',space = 0.01,
        limit = c(1,1),gene.order = 'logFC',gene.space = 0.25,gene.size = 5,
        lfc.col = c('red','white','blue'), 
        process.label = 10) 
GOChord(data = chord_MF,title = 'GO-Mollecular Function',space = 0.01,
        limit = c(1,1),gene.order = 'logFC',gene.space = 0.25,gene.size = 5,
        lfc.col = c('red','white','blue'), 
        process.label = 10)




## 
chord<-chord_dat(data = circ_BP,genes = df) #生成含有选定基因的数据框
GOCluster(circ_BP,GOplotIn_BP$Term) #系统聚类图

---

往期文章

---

小杜的生信筆記 ,主要发表或收录生物信息学的教程,以及基于R的分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!

相关推荐

恢复软件6款汇总推荐,帮你减轻数据恢复压力!

在当今数字化生活中,数据丢失的风险如影随形。无论是误删文件、硬盘故障,还是遭遇病毒攻击,丢失的数据都可能给我们带来不小的麻烦。此时,一款优秀的数据恢复软件就成为了挽救数据的关键。今天,为大家汇总推荐...

中兴星星一号刷回官方原版recovery的教程

【搞科技教程】中兴星星一号的官方recovery也来说一下了,因为之前给大家分享过了第三方的recovery了,之前给大家分享的第三方recovery也是采用一键刷入的方式,如果细心的朋友会发现,之前...

新玩机工具箱,Uotan柚坛工具箱软件体验

以前的手机系统功能比较单调,各厂商的重视程度不一样,所以喜欢玩机的朋友会解锁手机系统的读写权限,来进行刷机或者ROOT之类的操作,让使用体验更好。随着现在的手机系统越来越保守,以及自身功能的增强,...

三星g906k刷recovery教程_三星g906k中文recovery下载

【搞科技教程】看到有一些机友在找三星g906k的第三方recovery,下面就来说一下详细的recovery的刷入方法了,因为手机只有有了第三方的recovery之后才可以刷第三方的root包和系统包...

中兴星星2号刷recovery教程_星星二号中文recovery下载

【搞科技教程】咱们的中兴星星2手机也就是中兴星星二号手机的第三方recovery已经出来了,并且是中文版的,有了这个recovery之后,咱们的手机就可以轻松的刷第三方的系统包了,如果没有第三方的re...

数据恢复软件有哪些值得推荐?这 6 款亲测好用的工具汇总请收好!

在数字生活中,数据丢失的阴霾常常突如其来。无论是误删工作文档、格式化重要磁盘,还是遭遇系统崩溃,都可能让我们陷入焦虑。关键时刻,一款得力的数据恢复软件便是那根“救命稻草”。今天,为大家精心汇总6...

中兴u956刷入recovery的教程(中兴e5900刷机)

【搞科技教程】这次主要来给大家说说中兴u956手机如何刷入第三方的recovery,因为第三方的recovery工具是咱们刷第三方rom包的基础,可是很我欠却不会刷,所以太这里来给大家整理了一下详细的...

联想A850+刷recovery教程 联想A850+第三方recovery下载

【搞科技教程】联想A850+的第三方recovery出来了,这个第三方的recovery是非常的重要的,比如咱们的手机要刷第三方的系统包的时候,都是需要用到这个第三方的recovery的,在网上也是有...

工具侠重大更新 智能机上刷机一条龙完成

工具侠是针对玩机的机油开发的一款工具,不管是发烧级别的粉丝,还是普通小白用户,都可以在工具侠上找到你喜欢的工具应用。这不,最新的工具侠2.0.16版本,更新了专门为小白准备的刷机助手工具,以及MTK超...

shift+delete删除的文件找回6种硬盘数据恢复工具

硬盘作为电脑的重要存储设备,如同一个巨大的数字仓库,承载着我们日常工作、学习和生活中的各种文件,从珍贵的照片、重要的工作文档到喜爱的视频、音乐等,都依赖硬盘来安全存放。但有时,我们可能会不小心用sh...

使用vscode+Deepseek 实现AI编程 基于Cline和continue

尊敬的诸位!我是一名专注于嵌入式开发的物联网工程师。关注我,持续分享最新物联网与AI资讯和开发实战。期望与您携手探寻物联网与AI的无尽可能。这两天deepseek3.0上线,据说编程能力比肩Cl...

详解如何使用VSCode搭建TypeScript环境(适合小白)

搭建Javascript环境因为TypeScript不能直接在浏览器上运行。它需要编译器来编译并生成JavaScript文件。所以需要首先安装好javascript环境,可以参考文章:https://...

使用VSCode来书写你的Jupyter Notebooks

现在你可以在VScode里面来书写你的notebook了,使用起来十分的方便。下面来给大家演示一下环境的搭建。首先需要安装一个jupyter的包,使用下面的命令安装:pip3install-ih...

使用VSCode模板提高Vue开发效率(vscode开发vue插件)

安装VSCode安装Vetur和VueHelper插件,安装完成后需要重启VScode。在扩展插件搜索框中找到如下Vetur和VueHelper两个插件,注意看图标。添加Vue模板打...

干货!VsCode接入DeepSeek实现AI编程的5种主流插件详解

AI大模型对编程的影响非常之大,可以说首当其冲,Cursor等对话式编程工具渐渐渗透到开发者的工作中,作为AI编程的明星产品,Cursor虽然好用,但是贵啊,所以咱们得找平替,最好免费那种。俗话说,不...