一起画个圈圈看差异基因

2022-04-08 17:32:36 浏览数 (1)

最近朋友看论文,看到了个展示差异基因的好看图,说想给自己的差异基因也来画一个,我研究了下,实现挺简单,现成的R包circlize 就可以做,那我们就一起来画一个圈圈吧!

1.首先加载包和分析好的差异分析结果数据,差异基因需要注释到基因组上的具体位置,所以还需要下载基因组gtf注释文件来注释差异基因结果。

代码语言:javascript复制
####示例画差异基因圈图,物种为小鼠,选择其它物种时记得替换####

####0.加载工具包####
#画基因组圈图
library(circlize)
#读取gtf文件来注释差异基因
library("rtracklayer")


####1.加载依赖数据####
# mm10 的下载地址 https://www.gencodegenes.org/mouse/release_M10.html
#这里使用import导入gtf文件, 生成一个GRangs对象
gtf_data = import('../gencode.vM10.annotation.gtf') #gtf的路径
gtf_data = as.data.frame(gtf_data)

#差异分析结果数据加载和定义上下调基因
comPare_group='Ti6Al4V_CaP-Ti6Al4V'
data.name=paste0(comPare_group[1],'_DEG_results.Rdata')
load(data.name_old))
thre_logFC=with(DEG_DEseq2,mean(abs(log2FoldChange))   1*sd(abs(log2FoldChange)) )
thre_p=0.05
gene_up=rownames(DEG_DEseq2[with(DEG_DEseq2,log2FoldChange>thre_logFC & padj<thre_p),])
gene_down=rownames(DEG_DEseq2[with(DEG_DEseq2,log2FoldChange < -thre_logFC & padj<thre_p),])
up_logFC = DEG_DEseq2[with(DEG_DEseq2,log2FoldChange>thre_logFC & padj<thre_p),]$log2FoldChange
down_logFC =DEG_DEseq2[with(DEG_DEseq2,log2FoldChange < -thre_logFC & padj<thre_p),]$log2FoldChange

这里的差异分析结果矩阵为DEseq2 差异分析的结果矩阵,具体数据结构如下图,大家替换成自己的结果矩阵即可。

2.注释差异基因数据

代码语言:javascript复制
####2.注释差异基因数据####
gene_up_mete=gtf_data[match(gene_up,gtf_data$gene_name),]
bed1=cbind(gene_up_mete[,1:3],up_logFC)
bed1=na.omit(bed1)
colnames(bed1) = c("chr","start","end","value1")

gene_down_mete=gtf_data[match(gene_down,gtf_data$gene_name),]
bed2=cbind(gene_down_mete[,1:3],down_logFC)
bed2=na.omit(bed2)
colnames(bed2) = c("chr","start","end","value1")

3.初始化基因组圈图,circlize这个包有现成的基因组图,初始化后便可以得到结果图最外圈的那个基因圈,结果如下所示

代码语言:javascript复制
####3.初始化基因组圈图####
circos.initializeWithIdeogram(species = "mm10",plotType = NULL)
circos.track(ylim = c(0, 1), panel.fun = function(x, y) {
  chr = CELL_META$sector.index
  xlim = CELL_META$xlim
  ylim = CELL_META$ylim
  circos.rect(xlim[1], 0, xlim[2], 1, col = rand_color(1))
  circos.text(mean(xlim), mean(ylim), chr, cex = 0.7, col = "white",
              facing = "inside", niceFacing = TRUE)
}, track.height = 0.15, bg.border = NA)

4. 最后把我们注释好的差异基因,添加为此图的内圈,一组组的添加上去就可以了。此处示例一组

代码语言:javascript复制
####4.添加基因基因的圈圈####
#黑色下调,红上调
bed_list = list(bed2,bed1)
circos.genomicTrack(bed_list, 
               panel.fun = function(region, value, ...) {
                 i = getI(...)
                 circos.genomicPoints(region, value, pch = 16, cex = 0.5, col = i, ...)
               })
#清除
circos.clear()

结果如下图,简单版的就画好了

如果想再添加差异基因组,替换注释好的bed_list ,再进行gemomicTack的添加即可。今天这个圈圈就到这里了,但是添加的差异组基因不宜过多,个人认为1~4组比较适合。

要修改配色和添加lable建议可以存为ppt 格式进行个性化修改

代码语言:javascript复制
library(eoffice)
eoffice::topptx(filename = 'diffgroupGene_geneCircos.pptx')

0 人点赞