022 免疫细胞相关性分析 一张图展示目标基因和所有的免疫细胞之间的关系

一、生信分析的目的

前面我们研究了①目标基因高低表达组中的免疫细胞的表达差异②目标基因和免疫细胞表达之间的相关性以及③目标基因在免疫浸润的情况对人的生存曲线的影响;三者都是可以的,但是如果我们每次都放三张图上去的话,就会显得比较臃肿,所以今天这章节就是用一张图将所有的免疫细胞和基因的表达关系表示清楚。

二、具体的代码

remove(list = ls()) ##清空当前环境
setwd("D:/生信代码复现/15.免疫细胞相关性分析/15.免疫细胞相关性分析") ##💚💚💚设置路径


inputFile="cor.result.txt"       #💛💛💛输入文件,这个文件需要本地存在,这个可以在《010-2.基因表达与免疫细胞浸润的关系》中获得


#读取输入文件
data = read.table(inputFile, header=T, sep="\t", check.names=F)

#定义圆圈颜色的函数
p.col = c('gold','pink','orange','LimeGreen','darkgreen')
fcolor = function(x,p.col){
  color = ifelse(x>0.8,p.col[1],ifelse(x>0.6,p.col[2],ifelse(x>0.4,p.col[3],
                ifelse(x>0.2,p.col[4], p.col[5])
                )))
  return(color)
}

#定义设置圆圈大小的函数
p.cex = seq(2.5, 5.5, length=5)
fcex = function(x){
  x=abs(x)
  cex = ifelse(x<0.1,p.cex[1],ifelse(x<0.2,p.cex[2],ifelse(x<0.3,p.cex[3],
              ifelse(x<0.4,p.cex[4],p.cex[5]))))
  return(cex)
}

#根据pvalue定义圆圈的颜色
points.color = fcolor(x=data$pvalue,p.col=p.col)
data$points.color = points.color

#根据相关系数定义圆圈的大小
points.cex = fcex(x=data$cor)
data$points.cex = points.cex
data=data[order(data$cor),]

########绘制图形########
xlim = ceiling(max(abs(data$cor))*10)/10         #x轴范围
pdf(file="棒棒糖图.pdf", width=9, height=7)      #输出图形
layout(mat=matrix(c(1,1,1,1,1,0,2,0,3,0),nc=2),width=c(8,2.2),heights=c(1,2,1,2,1))
par(bg="white",las=1,mar=c(5,18,2,4),cex.axis=1.5,cex.lab=2)
plot(1,type="n",xlim=c(-xlim,xlim),ylim=c(0.5,nrow(data)+0.5),xlab="Correlation Coefficient",ylab="",yaxt="n",yaxs="i",axes=F)
rect(par('usr')[1],par('usr')[3],par('usr')[2],par('usr')[4],col="#F5F5F5",border="#F5F5F5")
grid(ny=nrow(data),col="white",lty=1,lwd=2)
#绘制图形的线段
segments(x0=data$cor,y0=1:nrow(data),x1=0,y1=1:nrow(data),lwd=4)
#绘制图形的圆圈
points(x=data$cor,y = 1:nrow(data),col = data$points.color,pch=16,cex=data$points.cex)
#展示免疫细胞的名称
text(par('usr')[1],1:nrow(data),data$Cell,adj=1,xpd=T,cex=1.5)
#展示pvalue
pvalue.text=ifelse(data$pvalue<0.001,'<0.001',sprintf("%.03f",data$pvalue))
redcutoff_cor=0
redcutoff_pvalue=0.05
text(par('usr')[2],1:nrow(data),pvalue.text,adj=0,xpd=T,col=ifelse(abs(data$cor)>redcutoff_cor & data$pvalue<redcutoff_pvalue,"red","black"),cex=1.5)
axis(1,tick=F)

#绘制圆圈大小的图例
par(mar=c(0,4,3,4))
plot(1,type="n",axes=F,xlab="",ylab="")
legend("left",legend=c(0.1,0.2,0.3,0.4,0.5),col="black",pt.cex=p.cex,pch=16,bty="n",cex=2,title="abs(cor)")

#绘制圆圈颜色的图例
par(mar=c(0,6,4,6),cex.axis=1.5,cex.main=2)
barplot(rep(1,5),horiz=T,space=0,border=NA,col=p.col,xaxt="n",yaxt="n",xlab="",ylab="",main="pvalue")
axis(4,at=0:5,c(1,0.8,0.6,0.4,0.2,0),tick=F)
dev.off()

三、最终的效果

①R语言中的效果:
image.png

②文件效果:
image.png

四、遇到的问题

五、参考

①具体的代码——公众号《叉叉滴同学的生信笔记》