【画图】与COVID-19/SARS-CoV-2/2019-nCoV病毒结合ACE2基因的表达在人肺组织中与那些基因表达相关?

2023-02-28 19:13:30 浏览数 (1)

画着画着,标书研究基础就画完了。

为什么要画这个图?

现在已经有明确的实验证明,跟SARS病毒一样,新冠状病毒2019-nCoV与宿主细胞的ACE2受体结合[1]。上次教程已经给大家演示了,GTEx数据库有人各组织中基因表达谱数据,下载整理这个数据可以绘制出ACE2受体在人体组织中的表达量情况以及可能的功能有哪些。

【画图】冠状病毒结合的宿主细胞受体ACE2在人组织中的表达情况

【画图】ACE2在TCGA肺癌数据的表达情况(请不要过度解读这个图的结果!)

我们平时在做分析的时候,找到目标基因预测功能以后要看看这个基因与其他基因表达相关情况,这就需要批量分析ACE2与其他基因表达量的相关性。

啰嗦几句 致谢

今天要画的图中结果可以看到一些lncRNA的表达与ACE2在肺组织中的正相关的那么课题就来了,至于没写国自然的小伙伴,这个干货可要抓住了!

涉及到批量最好用并行,下面代码涉及到并行的部分请诸位一定要改代码,电脑过热发烧什么的,可别怪站长没提醒哦!

郑重感谢小丫画图!大家可以在微店里搜索各种生信美图的代码,下面代码绝大部分是修改自Ya37,清洗数据部分做了优化以完成一对多的画图。

画图

1. 获得人肺组织表达谱数据批量并行计算

代码语言:javascript复制
lungTMP<-read.csv("Lung.csv",header = T,check.names = F,row.names = 1)
pathway.score <- function(data,gene){
  y <- as.numeric(data[gene,])
  rownames <- rownames(data)
  dataframes<-do.call(rbind,lapply(cl=cl,rownames, function(x){
    dd  <- cor.test(as.numeric(data[x,]),y,type="spearman")
    data.frame(gene=gene,Genesets=x,cor=dd$estimate,p.value=dd$p.value )
  }))
  dataframes
}
ACE2cor<-pathway.score(data=lungTMP,gene="ENSG00000130234.10")

2. 整理画图需要的数据

代码语言:javascript复制
ACE2corG<-na.omit(AnnoENSG(data=ACE2cor,col="Genesets"))
ACE2corG_sig<-subset(ACE2corG,ACE2corG$p.value<0.05 & abs(ACE2corG$cor)>0.3)
ACE2corG_sig$gene<-"ACE2"
ACE2corG_sig_lnc<-Filterlnc(ACE2corG_sig)
ACE2corG_sig_lncSort<-ACE2corG_sig_lnc[order(ACE2corG_sig_lnc$cor,decreasing = T),][1:5,]
ACE2corG_sig_Sort<-ACE2corG_sig[order(ACE2corG_sig$cor),][1:5,]
ACE2corG_circle<-rbind(ACE2corG_sig_lncSort,ACE2corG_sig_Sort)

3. 整理画图数据

代码语言:javascript复制
Links<-data.frame(Gene_1=ACE2corG_circle$gene,
                  Gene_2=ACE2corG_circle$SYMBOL,
                  Correlation=ACE2corG_circle$cor)
Corr <- data.frame(rbind(data.frame(Gene=Links[,1], Correlation=Links[,3]), 
                         data.frame(Gene=Links[,2], Correlation=Links[,3])),stringsAsFactors = F)
Corr$Index <- seq(1,nrow(Corr),1)
Corr <- Corr[order(Corr[,1]),]
corrsp<-split(Corr,Corr$Gene)
corrspe<-lapply(corrsp, function(x){x$Gene_Start<-0
                                    if (nrow(x)==1){x$Gene_End<-1}else{
                                      x$Gene_End<-sum(abs(x$Correlation))}
                                    x})
GeneID<-do.call(rbind,corrspe)
GeneID<-GeneID[!duplicated(GeneID$Gene),]
library(ggsci)
mycol <- pal_d3("category20c")(20)
n<-nrow(GeneID)
GeneID$Color<-mycol[1:n]
Corr[,2] <- abs(Corr[,2]) 
corrsl<-split(Corr,Corr$Gene)
aaaaa<-c()
corrspl<-lapply(corrsl,function(x){nn<-nrow(x)
                                    for (i in 1:nn){
                                      aaaaa[1]<-0
                                      aaaaa[i 1]<-x$Correlation[i] aaaaa[i]}
                                      bbbbb<-data.frame(V4=aaaaa[1:nn],V5=aaaaa[2:(nn 1)])
                                      bbbbbb<-cbind(x,bbbbb)
                                      bbbbbb
                                      })
Corr<-do.call(rbind,corrspl)
Corr <- Corr[order(Corr$Index),]
Links$start_1 <- Corr$V4[1:(nrow(Corr)/2)]
Links$end_1 <- Corr$V5[1:(nrow(Corr)/2)]
Links$start_2 <- Corr$V4[(nrow(Corr)/2   1):nrow(Corr)]
Links$end_2 <- Corr$V5[(nrow(Corr)/2   1):nrow(Corr)]
color <- data.frame(colorRampPalette(c("#67BE54", "#FFFFFF", "#F82C2B"))(201))
for (i in 1:nrow(Links)){
  Links[i,8] <- substring(color[Links[i,3] * 100   101, 1], 1, 7)
}
names(Links)[8] <- "color"

4.画图

代码语言:javascript复制
library(circlize)
pdf("correlation.pdf",width = 6,height = 6)
par(mar=rep(0,4))
circos.clear()
circos.par(start.degree = 90, 
           gap.degree = 5, 
           track.margin = c(0,0.23),
           cell.padding = c(0,0,0,0)
)
circos.initialize(factors = GeneID$Gene,
                  xlim = cbind(GeneID$Gene_Start, GeneID$Gene_End))
circos.trackPlotRegion(ylim = c(0, 1), factors = GeneID$Gene, 
                       track.height = 0.05,
                       panel.fun = function(x, y) {
                         name = get.cell.meta.data("sector.index") 
                         i = get.cell.meta.data("sector.numeric.index") 
                         xlim = get.cell.meta.data("xlim")
                         ylim = get.cell.meta.data("ylim")
                         circos.text(x = mean(xlim), y = 1,
                                     labels = name,
                                     cex = 0.7, 
                                     niceFacing = TRUE, 
                                     facing = "bending",
                                     adj = c(0.5, -2.8), 
                                     font = 2  
                         )
                         circos.rect(xleft = xlim[1], 
                                     ybottom = ylim[1],
                                     xright = xlim[2], 
                                     ytop = ylim[2],
                                     col = GeneID$Color[i],
                                     border = GeneID$Color[i])

                         circos.axis(labels.cex = 0.7, 
                                     direction = "outside"
                         )})

for(i in 1:nrow(Links)){
  circos.link(sector.index1 = Links$Gene_1[i], 
              point1 = c(Links[i, 4], Links[i, 5]),
              sector.index2 = Links$Gene_2[i], 
              point2 = c(Links[i, 6], Links[i, 7]),
              col = paste(Links$color[i], "C9", sep = ""), 
              border = FALSE, 
              rou = 0.7
              )}
i <- seq(0,0.995,0.005)
rect(-1 i/2, 
     -1, 
     -0.9975 i/2, 
     -0.96, 
     col = paste(as.character(color[,1]), "FF", sep = ""),
     border = paste(as.character(color[,1]), "FF", sep = ""))
text(-0.97, -1.03, "-1")
text(-0.51, -1.03, "1")

备注:上面annoE是站长自己写的注释基因的包。

画图素材:

1、在GTEx上下载其中人肺组织表达谱数据

2、需要annoE包和提取lncRNA的FilterLnc代码

3、想快速的运行的需要并行处理的代码

上面的素材,大家可以自行准备,当然如果嫌麻烦

大家可以在文末赞赏,可以获得出图代码和相关数据!

na

0 人点赞