Y叔的富集分析神包clusterProfiler集成了很多富集分析工具,如GO,KEGG,DO,GSEA,DAVID等。并且对于每种富集分析方法的结果,Y叔也写出了配套的可视化软件包:enrichplot。关于这一系列包,Y叔在github上写成了一本书: https://yulab-smu.github.io/clusterProfiler-book/chapter12.html 。 最近enrichplot包更新了emapplot()cnetplot()compareCluster()结果的支持,下面对这些新功能做下详细讲解。

1、安装clusterProfiler,DOSE,enrichplot

每当Y叔有新的idea时,他就会在github上对R包进行更新,因此推荐从github上安装这几个包。如果从Bioconductor上安装旧版本的包,就可能遇到本教程的某些function无法运行。

if(!requireNamespace("devtools", quietly = TRUE))
    install.packages("devtools")

if(!requireNamespace("clusterProfiler", quietly = TRUE))
    devtools::install_github("YuLab-SMU/clusterProfiler")

if(!requireNamespace("DOSE", quietly = TRUE))
    devtools::install_github("YuLab-SMU/DOSE")

if(!requireNamespace("enrichplot", quietly = TRUE))
    devtools::install_github("YuLab-SMU/enrichplot")
library(clusterProfiler)
library(DOSE)
library(enrichplot)

2、Gene-Concept Network

cnetplot函数可以将基因与它们所富集到的 biological concepts(如GO terms和KEGG pathways等)之间的复杂联系用网络图清晰的展现出来。 以下图片是对单个基因集富集结果的展示:

data(geneList)
de <- names(geneList)[abs(geneList) > 2]
edo <- enrichDGN(de)
## convert gene ID to Symbol
edox <- setReadable(edo, 'org.Hs.eg.db', 'ENTREZID')
cnetplot(edox, foldChange=geneList)

现在cnetplot函数可以支持多个基因集富集结果了。以gcSample数据为例:

data(gcSample)
str(gcSample)
## List of 8
##  $ X1: chr [1:216] "4597" "7111" "5266" "2175" ...
##  $ X2: chr [1:805] "23450" "5160" "7126" "26118" ...
##  $ X3: chr [1:392] "894" "7057" "22906" "3339" ...
##  $ X4: chr [1:838] "5573" "7453" "5245" "23450" ...
##  $ X5: chr [1:929] "5982" "7318" "6352" "2101" ...
##  $ X6: chr [1:585] "5337" "9295" "4035" "811" ...
##  $ X7: chr [1:582] "2621" "2665" "5690" "3608" ...
##  $ X8: chr [1:237] "2665" "4735" "1327" "3192" ...

图中的每一个cluster都是一个基因集。这些基因原本都是gene ID,为了方便观看,这个例子将gene ID转换成了gene symbol。如下图A。 如果你希望画出gene ID的图,则可以不需要xxx <- setReadable(xx, 'org.Hs.eg.db', 'ENTREZID')这一步。如下图B。

xx <- compareCluster(gcSample, fun="enrichKEGG",
                     organism="hsa", pvalueCutoff=0.01)
xx@readable = FALSE
xxx <- setReadable(xx, 'org.Hs.eg.db', 'ENTREZID')
p1 <- cnetplot(xxx)
p2 <- cnetplot(xx)
cowplot::plot_grid(p1, p2, ncol=2, labels=LETTERS[1:2])

默认参数下,图中代表biological concepts节点的饼图中各个cluster的面积相等。如果使用pie = "count")参数,则可以使各个cluster的面积按照基因数目的比例来展示。

cnetplot(xxx, pie = "count")

pie_scale可以用来调节节点的大小,默认参数是1。

cnetplot(xxx, pie_scale = 1.5)

node_label参数可以用来调节要显示哪些节点的label。默认参数下显示所有label。node_label="category"表示只显示biological concepts节点label,node_label="gene"表示只显示基因节点的label,node_label="none"表示不显示任何label。

p1 <- cnetplot(xxx, node_label="category")
p2 <- cnetplot(xxx, node_label="none")
cowplot::plot_grid(p1, p2, ncol=2, labels=LETTERS[1:2])

作为一款强大的网络图绘制函数,layout当然也是可以自由调节的。 对于漂亮的圈图,我们也可以直接使用参数circular = TRUE

p1 <- cnetplot(xxx, layout="nicely",node_label="none")
p2 <- cnetplot(xxx, layout="circle", node_label="none",pie_scale = 0.2)
p3 <- cnetplot(xxx, layout="kk",node_label="none")
p4 <- cnetplot(xxx,circular = TRUE,pie_scale = 0.2, node_label="none")
cowplot::plot_grid(p1, p2, p3, p4, ncol=2, labels=LETTERS[1:4])

前面的图中基因节点大小都是固定的。其实cnetplot可以对其大小进行赋值,如差异显著性水平等。下面这个例子用log2FC的值来调整基因节点的大小。

data(geneList)
cnetplot(xxx,foldChange=geneList,legend_n = 3)

3、Enrichment Map

Enrichment Map可以展示出基因集所富集到的biological concepts之间的连接关系,用emapplot 函数实现。此函数的更新内容已经写在了 https://yulab-smu.github.io/clusterProfiler-book/chapter12.html#enrichment-map 中。