GO富集可视化:clusterProfiler+GOplot

现在的社会正处于大数据时代,生物学研究领域也迎来了大组学时代。无论是植物。动物,还是微生物,都有许多物种被测序。在后续的个性化分析过程中,通常会得到庞大的基因数据,如何选择一个高效的生物功能分析方法显得尤其重要。基因的功能富集,可以让你快速地了解所获得的基因具有怎样的生物功能,它们主要集中在哪些生物通路。clusterProfiler、GOplot这两个工具可以说是在众多GO富集分析软件中脱颖而出,它们不仅能够支持多个数据库(GO/KEGG/DOSE/MSigDb/Reactome),还能绘出高大上的CNS级别富集图。那么,今天主要就是介绍如何结合这两个软件,让你的一组gene symbol秒变高富帅。

01. 准备数据

经过上游的生信分析我们会获得许多具有生物学意义的gene set,可以是差异表达基因,也可是正选择基因或者加速进化基因。通常,只要具有这些基因的gene symbol或者是geneid,都可以利用该软件进行分析。

本次所使用的数据主要是gene symbol,如下图所示


02. 读入数据

setwd("C:/Users/lenovo/Desktop/RERconverge-master/R")  # 设置工作路径
geneset <- read.table(file = "genelist",header = F) #读取数据
> head(geneset) #查看数据
      V1
1 ADCY10
2  ADCY2
3  ADCY3
4  ADCY4
5  ADCY5
6  ADCY6
gene=as.character(geneset[,1]) #转换字符格式
> head(gene)
[1] "ADCY10" "ADCY2"  "ADCY3"  "ADCY4" 
[5] "ADCY5"  "ADCY6"

03. 使用clusterProfiler进行富集分析

library(org.Hs.eg.db)
library(clusterProfiler)
library(GOplot)
library(ggplot2)
library(stringr)

gene <- bitr(gene, fromType="SYMBOL", toType="ENTREZID", OrgDb="org.Hs.eg.db") # 将symbol转换为entrzid

ego <- enrichGO(gene=gene$ENTREZID,
                OrgDb='org.Hs.eg.db',
                ont= "BP",
                pAdjustMethod="BH",
                pvalueCutoff  = 0.01,
                qvalueCutoff  = 0.05,
                 readable = TRUE)
> dim(ego)
[1] 402   9
ego2 <- simplify(ego,cutoff=0.7,by="p.adjust",select_fun=min)  #去除冗余,可以调整cutoff值
> dim(ego2)
[1] 144   9
heatlpot(ego2)
cnetplot(ego2,categorySize="pvalue",circular = TRUE, colorEdge = TRUE)
# KEGG富集
kk <- enrichKEGG(gene$ENTREZID, organism="hsa",keyType = "kegg",pvalueCutoff=0.01,pAdjustMethod="BH",qvalueCutoff=0.05)
barplot(kk, showCategory=20,title="Enrichment KEGG")

04. 整理GOplot输入文件格式


###ego3 <- data.frame(ego2) ### 转换为数据矩阵
GO <- ego[1:9,c(1,2,8,6)]  ### 选取富集结果前9个,并提取GO id,description, adj.p以及基因ID列
GO$geneID <- str_replace_all(GO$geneID,"/",",") ### 修改geneID这一列的分隔符号
names(GO)=c("ID","Term","Genes","adj_pval")
GO$Category = "BP"
###构建基因矩阵,并随机生成logFC
genedata = data.frame(ID=geneset$V1,logFC=rnorm(length(geneset$V1),mean = 0,sd=2))
circ <- circle_dat(GO,genedata)

05. 使用GOplot绘图

# 01. 和弦图
chord <- chord_dat(data=circ, genes = genedata)  # 生成带有选定基因列表的矩阵
chord <- chord_dat(data=circ, process = GO$Term) #生成带有选定GO term的列表矩阵

chord <- chord_dat(data=circ, genes=genedata,process = GO$Term) # 构建数据
GOChord (         data=chord,
                  title = "GOChord plot", 
                  space = 0.02, # go term处间隔大小
                  limit = c(3,5) #第一个值是至少分配给一个基因的go term数目,第二个数值是至少分配给一个Go term的基因数
                  gene.order ='logFC',gene.space=0.25,gene.size=10,
                  lfc.col = c('firebrick3','white','royalblue3') #上下调基因颜色
                  ribbon.col=brewer.pal(length(GO$Term)),"set3" #GO term颜色
                  process.label = 18 # Go terms字体大小
)


# 02. 条形图
GOBar(circ,display = 'multiple')

# 03. 气泡图
# 要添加标题,请更改圆圈的颜色,对图进行构图,并更改标签阈值,请使用以下参数:
GOBubble(circ, title = 'Bubble plot', colour = c('orange', 'darkred', 'gold'), display = 'multiple', labels = 3)
# 对于构面图,还可以通过将bg.col设置为TRUE,根据显示的类别为面板的背景着色:
GOBubble(circ, title = 'Bubble plot with background colour', display = 'multiple', bg.col = T, labels = 3)
# 软件包的更新版本中包含一个新函数reduce_overlap ,以减少冗余项的数量. 到目前为止,已实现的方法非常简单+缓慢,需要进一步完善. 但是,通过减少冗余项的数量,可以像气泡图一样显着提高图的可读性. 该函数删除基因重叠大于或等于设定阈值的所有术语. 该函数在不考虑GO层次结构的情况下,每组代表一个术语:
# Reduce redundant terms with a gene overlap >= 0.75...
reduced_circ <- reduce_overlap(circ, overlap = 0.75)
# ...and plot it
GOBubble(reduced_circ, labels = 2.8)

# 04. 圈图
GOCircle(circ)

# 外圈显示了分配基因的logFC的每个项的散点图. 默认情况下,红色圆圈显示上调,蓝色圆圈显示下调. 可以使用参数lfc.col更改颜色. 因此,更容易理解,为什么在某些情况下,高度有效的术语的z得分接近于零. Z分数为零并不意味着该术语不重要. 至少没有,只要其显着丰富即可. 它只是表明z分数是一个粗略的度量,因为显然分数并未考虑过程中单个基因的功能水平和激活依赖性. 您可以使用各种参数来更改图的布局,请参阅? GOCirlce.nsub参数需要更多说明才能明智地使用. 首先,它可以是数字或字符向量. 如果它是一个字符向量,则它包含要显示的进程的ID或术语说明(未显示输出)。
IDs <- c('GO:0007507', 'GO:0001568', 'GO:0001944', 'GO:0048729', 'GO:0048514', 'GO:0005886', 'GO:0008092', 'GO:0008047')
GOCircle(circ, nsub = IDs)

# 05. 热图
GOHeat(chord, nlfc = 1, fill.col = c('red', 'yellow', 'green'))

# 06. 聚类图
GOCluster(circ, EC$process, clust.by = 'logFC', term.width = 2)

OCluster(circ, EC$process, clust.by = 'term', lfc.col = c('darkgoldenrod1', 'black', 'cyan1'))

# 07. 韦恩图

l1 <- subset(circ, term == 'heart development', c(genes,logFC))
l2 <- subset(circ, term == 'plasma membrane', c(genes,logFC))
l3 <- subset(circ, term == 'tissue morphogenesis', c(genes,logFC))
GOVenn(l1,l2,l3, label = c('heart development', 'plasma membrane', 'tissue morphogenesis'))

参考链接:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,527评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,314评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,535评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,006评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,961评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,220评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,664评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,351评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,481评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,397评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,443评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,123评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,713评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,801评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,010评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,494评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,075评论 2 341

推荐阅读更多精彩内容