最近在学习使用GOplot这个包中的GOChord()函数可视化GO富集分析结果,又有了一点收获,记录在这里。
通过help(package="GOplot")
查看帮助文档中的例子,这个例子中他准备了4数据
- EC$david
david的GO富集分析结果 - EC$genelist
这个是R语言包limma做差异表达分析得到的结果,其中的t和B是什么意思我还没有搞明白 - EC$genes
这个数据包含两列,一列是感兴趣的基因名,一列是logFC的值 - EC$process
自己感兴趣的GO term
例子中通过两个函数将这些数据整合到一起
circ<-circle_dat(EC$david,EC$genelist)
chord<-chord_dat(circ,EC$genes,EC$process)
接下来就可以画图了
GOChord(chord,gene.order = 'logFC')
image.png
最终的输入数据chord,使用class()函数查看数据类型,发现其是一个矩阵,实际数据内容是
> head(chord)
heart development phosphorylation vasculature development blood vessel development tissue morphogenesis
PTK2 0 1 1 1 0
GNA13 0 0 1 1 0
LEPR 0 0 1 1 0
APOE 0 0 1 1 0
CXCR4 0 0 1 1 0
RECK 0 0 1 1 0
cell adhesion plasma membrane logFC
PTK2 0 1 -0.6527904
GNA13 0 1 0.3711599
LEPR 0 1 2.6539788
APOE 0 1 0.8698346
CXCR4 0 1 -2.5647537
RECK 0 1 3.6926860
行是基因名,列是GO term,用0,或者1来表示基因是否属于某个GO term。最后一列是logFC的值。
明白了这个数据形式,那我们可以完全自己来构造数据了。
为了验证自己的想法,来吧chord这个数据改造一下,只取前两列加最后一列logFC值试一试。
chord_1<-chord[,c(1,2,8)]
chord_1
GOChord(chord_1,gene.order = 'logFC')
但是我遇到了报错
Error in data.frame(x.end = x.end, y.end = y.end, processID = processID) :
arguments imply differing number of rows: 101, 86
我猜是同一个基因不能在每个GOterm下都是0,至少得有一个1
把数据集再改一下
chord_2<-chord_1[!(chord_1[,1] == 0 & chord_1[,2] == 0),]
GOChord(chord_2,gene.order = "logFC")
这样就没有问题了
image.png
这样的话我们自己的数据如果想做弦图也完全可以用这个函数了
构造一份数据
df<-sample(c(0,1),24,replace = T)
df<-matrix(df,ncol=4,byrow = T)
rownames(df)<-paste("Gene",1:6,sep="_")
colnames(df)<-paste("GO_term",1:4,sep="_")
df<-as.data.frame(df)
df$logFC<-sample(c(-1,1),6,replace = T)
df
GOChord(df,gene.order = "logFC")
image.png
最后的结论就是只要有了GO或者KEGG富集分析的结果,都可以GOChord()这个函数来画图。
如何整理GO或者KEGG的富集分析结果为GOChord()函数的输入格式我还得好好想想。
欢迎大家关注我的公众号
小明的数据分析笔记本
网友评论