基因组数据分析R语言初学绘图

多组差异基因富集分析结果聚类 | 获得共表达term的富集图

2022-06-05  本文已影响0人  小杜的生信筆記

本教程问题:
1.mmGO.rdata文件的制作,是否不需要这一步,更改一下脚本即可实现呢?
2.这样的图形美化,目前的图还不是很满意,需要进行美化。
这些问题,需要我们大家一起解决,切分享哦!


一、前言

我们在做组学时,常常遇到多多个处理进行差异分析,获得差异基因或差异代谢物。此后,是对这些差异结果进行GO或KEGG富集分析。这是一个很普遍的结果,但是这样一弄后,我们对多个组合差异基因进行富集分析后,获得多个GO或KEGG富集分析结果,图很多,但是重复的term也是很多,那如何阐述就是个问题,以及很多图列在论文中也不是很美观,只能间部分图放在附件中。



那么,我们是不是可以间多个GO或KEGG的term进行合并绘图呢?这个想法在很久以前就像做,但是一直没找到相关的教程。今天,突发奇想,无意间看到这样的教程,那就重复一下吧。

PS:在这个教程中,自己很多的参数还是没有很好的了解,如果你看过或是已经可以深入了解,希望你可以分享一下哦。


二、图形效果


这是最终图形的效果,总体来说,还是基本满足我们的需求,但是很多细节还是需要调整。

三、开始绘图

3.1 导入相关的包

## 导入R包
library(plyr)
library(stringr)
library(ape)
library(GOSemSim)
library(ggtree)   ## 进化树
library(scales)
library(cowplot)  ## 合图
library(ggplot2)

设置路劲

setwd("D:\\小杜的生信筆記\\20220605GO富集聚类")

导入GO富集结果,这些结果在外面前期的教程中可获得:clusterProfiler包 |GO、KEGG功能富集分析 | 值得收藏 GO、KEGG功能富集分析 | 功能富集网络图、热图绘制(代码重新)


多组富集分析结果的文件名统一命名,便于导入

fnames <- Sys.glob("enrichGO*.csv")
fnames

# GO term的合集
ego.ID <- unique(ego.all[,c(2:4)])
head(ego.ID)

> head(ego.ID)
           ID                                               Description   BgRatio  Bg
1  GO:0046777                               protein autophosphorylation 235/23239 235
2  GO:0034329                                    cell junction assembly 200/23239 200
3  GO:0034330                                cell junction organization 248/23239 248
5  GO:0098742 cell-cell adhesion via plasma-membrane adhesion molecules 199/23239 199
11 GO:0034332                            adherens junction organization 121/23239 121
12 GO:0043405                         regulation of MAP kinase activity 293/23239 293
```
## 3.3 GO term过滤
```
#删掉超过300个基因的GO term
#如果不想删除,可以注释掉下面这段
ego.ID$Bg <- as.numeric(str_split_fixed(ego.ID$BgRatio, "/",2)[,1]) #提取GO term包含的基因数量
ego.ID <- ego.ID[ego.ID$Bg < 300,] 
dim(ego.ID)

#删掉少于100个基因的GO term
#具体怎样筛选,要根据你自己的数据灵活设置
ego.ID <- ego.ID[ego.ID$Bg > 100,] 
dim(ego.ID)
head(ego.ID)
```
## 3.4 横向合并多组富集结果,用于画热图
```
## 横向合并多组富集结果,用于画热图
MyMerge <- function(x, y){
  df <- merge(x, y, by= "ID", all.x= TRUE, all.y= TRUE)
  return(df)
}
ego.m <- Reduce(MyMerge, fdataset)
head(ego.m)
```
```
#只保留GO term ID和各组的p.adjust
ego.m <- ego.m[,c(1,4,7,10)] #此处有三组,如果有更多组,要在后面继续加
#提取筛选过的GO term
ego.m <- merge(ego.ID[,1:2], ego.m, by= "ID", all.x= TRUE)
rownames(ego.m) <- ego.m$Description
ego.m$ID <- NULL
ego.m$Description <- NULL
```
```
#把列名改为组名
#colnames(ego.m)<- str_remove(fnames, ".csv")
colnames(ego.m) <- paste0("G", seq(1:length(fnames)))
head(ego.m)

> head(ego.m)
                                                       G1          G2          G3
tissue homeostasis                                     NA 0.008364684 0.004178739
regulation of cell-matrix adhesion                     NA 0.003506443 0.003381501
hematopoietic progenitor cell differentiation 0.007418708 0.002188681          NA
myeloid cell homeostasis                      0.012630541          NA          NA
myeloid leukocyte differentiation             0.003034455          NA          NA
regulation of leukocyte migration             0.005619600          NA 0.012970792

3.4 按GO term的相似性聚类

mmGO.rdata文件是这样获得的,但是我在考虑如果我们没有自己.db是要如何获得,是否可以根据我们前面的分析进行获得呢?这个问题需要大家一起解决,如果你知道可以分享一下,谢谢!!*

library(org.Hs.eg.db)
hgGO <- godata('org.Hs.eg.db', ont="BP")
head(hgGO)
#save(hgGO, file="mmGO.rdata")

Q1,需要我们一起解决!!!

#导入之前保存的文件
(load("mmGO.rdata")) 

#计算GO term之间的相似性
ego.sim <- mgoSim(ego.ID$ID, ego.ID$ID, semData=mmGO, measure="Wang", combine=NULL)
ego.sim[1:3, 1:3]

> ego.sim[1:3, 1:3]
                            protein autophosphorylation cell junction assembly
protein autophosphorylation                       1.000                  0.061
cell junction assembly                            0.061                  1.000
cell junction organization                        0.090                  0.683
                            cell junction organization
protein autophosphorylation                      0.090
cell junction assembly                           0.683
cell junction organization                       1.000

#用GO term作为行名、列名,便于查看和画图
rownames(ego.sim) <- ego.ID$Description
colnames(ego.sim) <- ego.ID$Description
ego.sim[1:3, 1:3]

绘制聚类图

#给GO term分类
tree <- nj(as.dist(1-ego.sim))
ggtree(tree) + geom_tiplab() + #写GO term
  geom_text2(aes(subset=!isTip, label=node), hjust=-.3) + #写node编号
  coord_cartesian(xlim=c(-.1,1.3)) #左右两侧留出合适的空间

此图节点就是我们后续分类的标准



3.5 绘图

绘图代码在下面的教程中,如果获得也可以在知乎、公众号中进行获得代码数据事例数据。
多组差异基因富集分析结果聚类 | 获得共表达term的富集图


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

上一篇下一篇

猜你喜欢

热点阅读