查看原文
其他

如何完成GO富集分析并绘制柱状图?

莫北 SCIPainter 2023-12-20

之前在《案例复现(一):表达数据的下载与差异分析》《如何获取感兴趣通路相关的基因集?》《如何绘制好看的差异基因热图?》这3篇文章中介绍了如何从GEO数据库和GO数据库下载挖掘数据,并得到84个“oxidative stress”功能相关的差异基因。


接下来,对这84个OS-DEGs进行GO富集分析。原文中,作者使用的是DAVID (version 6.8),还是2016年的版本。不过,DAVID最近又开始更新了,我们这里使用最新的版本(v2022q3)。



DAVID链接:

https://david.ncifcrf.gov/home.jsp


GO富集分析



首先,点击Start Analysis选项按钮,进入分析页面,如下图,然后将84个“oxidative stress”功能相关的差异基因复制粘贴到输入框中(Step1: Enter Gene list);然后,选择基因ID类型为基因Symbol号 (Step2: Select Identifier);物种输入Homo Sapiens;基因List类型选择Gene List (Step3: List Type),最后,点击Submit List按钮提交任务。



接着,点击Functional Annotation Tool进行富集分析。



在富集分析结果列表中,点击加号按钮,可展开列表,这里仅选择GOTERM_BP_DIRECT、GOTERM_CC_DIRECT、GOTERM_MF_DIRECT三个选项。



然后,点击Functional Annotation Chart按钮进行富集分析,如下。



在弹出的分析结果表格中,点击Download File按钮下载表格。在弹出的网页中右键,另存为文本文件,默认为制表符分隔的文本文件,将拓展名改为“.xls”可直接用Excel打开。



当然,如果想查看单个GO分类(比如GOTERM_BP_DIRECT)的富集分析结果,可直接点击Chart按钮进行查看。



展开Options选项,可对分析结果进行设置,比如Count这里设置为5 (GO Term中至少富集到5个目的基因),勾选Fold Enrichment、FDR,点击Download File按钮下载表格。



在表格中,可选择自己感兴趣的GO term进行图表绘制,这里仅按文献中图表进行选择。这里的Fold Enrichment即富集因子,以第1行的数据为例,Fold Enrichment=(28/84)/(1714/18869)= 3.669584。



接下来,只需将三个分类的数据整合到一个表格中,如下表,然后将表格另存为csv格式的文件。



柱状图的绘制



对GO富集分析结果的可视化,这里选择使用R语言进行绘制柱状图,具体的绘图脚本如下。


1. 读入数据


#读入数据;
dt <- read.csv("GO_plotdata.csv",header = T)
#提取前3列数据用于作图;
df <- dt[,1:3]
#预览数据;
print(df)


#载入相关的R包;
library(ggplot2)
library(dplyr)
library(tidyr)
#重新生成分组标签;
Category <- c(rep("Biological Process",5),
rep("Cellular Component",5),
rep("Molecular Function",5))
#替换Category;
df$Category <-Category
#对Term列的GO id 和GO term 进行拆分;
df <- separate(df, Term, sep = "~", into = c("GO_id", "GO_term"))
#转成因子,防止重新排序;
df$GO_term <- factor(df$GO_term,levels=df$GO_term,ordered=TRUE)
#预览数据;
print(df)


2. 绘制柱状图


#建立数据(ratio, id)与图形(点)的映射关系,即确定点的(x,y)坐标,绘制散点图;
p1<-ggplot(df, aes(Count,GO_term,fill=Category))+
geom_bar(stat="identity",width = 0.6)
p1


#设置坐标轴的标题;
p2<-p1+labs(x="Num of Genes",y="GO term")
p2


#自定义颜色;
mycolor <- c("#0077c1","#00a99e","#6bc72b","#ff5a20","#ff1620","#752995")
scolor <- mycolor[c(1,3,4)]
p3 <- p2+scale_fill_manual(values = scolor)
p3


3. 自定义主题


#应用自带主题;
p3+theme_light()


#自定义图表主题,对图表做精细调整;
top.mar=0.2
right.mar=0.2
bottom.mar=0.2
left.mar=0.2
#隐藏坐标轴,并对字体样式、颜色、刻度长度等进行限定;
mytheme<-theme_light()+
theme(axis.text=element_text(family = "sans",colour ="gray20",size = 11),
panel.grid = element_blank(),
axis.ticks = element_line(size = 0.6,colour = "gray20"),
axis.ticks.length = unit(1.2,units = "mm"),
plot.margin=unit(x=c(top.mar,right.mar,bottom.mar,left.mar),
units="inches"))
p3+mytheme


当然,如果觉得以上的内容比较难的话,我这里推荐大家直接使用OmicShare的GO富集分析工具,只需上传目的基因列表即可轻松完成GO富集分析和图表绘制,更多详细的教程可参考《GO、KEGG富集分析如何显示上下调基因?》一文。


好啦,本次的分享就到这里啦!


*未经许可,不得以任何方式复制或抄袭本篇文章之部分或全部内容。版权所有,侵权必究。


# SCIPainter

基迪奥旗下绘图公众号

分享科研绘图技能与工具

欢迎关注与转发~


你的好友拍了拍你

并请你帮她点一下“分享”~


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存