超详细,小果带你用beeswarm画优雅的散点蜜蜂图分析基因与临床相关性

大家知道基因与临床数据之间的相关性分析层出不穷,并通过可视化手段将分析结果展示出来,今天小果带给大家一个beeswarmR包, 用于在R中绘制点图,特别适用于展示小样本、分类数据和多类别数据的分布情况。

beeswarm是一个在R语言中用于绘制点图(swarm plot)的包。点图是一种可视化方法,用于展示数据点在一个维度上的分布情况,特别适用于小样本和分类数据。在点图中,数据点会根据另一个维度进行分组,而不会互相重叠,以避免数据重叠和遮挡。这使得点图可以更清晰地显示数据的分布情况和密度。

本期主要给大家带来在进行基因与临床数据的相关性分析时,通过绘制箱线图和点图的方式,将基因表达在不同临床分组下的分布情况可视化呈现出来。这有助于研究人员快速发现基因在不同临床情况下的差异性。

#install.packages(“beeswarm”)

#安装名为beeswarm的R包。

library(beeswarm)

setwd(“”) #使用setwd()函数设置工作目录为特定路径修改工作目录

expFile=”rocSigExp.txt”

#表达数据文件

clinicalFile=”clinical.txt”

#临床数据文件

exp=read.table(expFile,sep=”\t”,header=T,check.names=F,row.names=1)

#读取表达数据文件

cli=read.table(clinicalFile,sep=”\t”,header=T,check.names=F,row.names=1)

#读取临床数据文件

exp=exp[,3:ncol(exp)]

#从表达数据中选择第3列到最后一列的数据

samSample=intersect(row.names(exp),row.names(cli))

#将两个数据集的样本ID进行交集运算,以确保表达数据和临床数据的样本一致性。

exp=exp[samSample,]

cli=cli[samSample,]

pFilter=0.05

#临床相关性分析,输出表格

outTab=c()

#初始化一个空的数据框 outTab,用于存储临床相关性分析的结果。

outTab=rbind(outTab,c(“id”,colnames(cli),”SigNum”))

colnames(outTab)=c(“id”,colnames(cli),”SigNum”)

for(i in colnames(exp)){

#循环遍历基因表达数据的每一列。

clinicalPvalVector=c()

sigSum=0

#内部循环中,对每个临床变量进行遍历分析,检验基因表达与临床变量的相关性。

for(clinical in colnames(cli)){

tab1=table(cli[,clinical])

labelNum=length(tab1)

rt1=cbind(expression=exp[,i],clinical=cli[,clinical])

#根据临床变量的不同水平,选择适当的统计检验方法(Wilcoxon秩和检验或Kruskal-Wallis检验)。

if(labelNum==2){

cliTest<-wilcox.test(expression ~ clinical, data=rt1)

}else{

cliTest<-kruskal.test(expression ~ clinical, data = rt1)}

pValue=cliTest$p.value

clinicalPvalVector=c(clinicalPvalVector,pValue)

#将p值存储在clinicalPvalVector中,并计算满足显著性条件(小于pFilter)的次数 sigSum。

if(pValue<pFilter){

sigSum=sigSum+1

#if语句,检查labelNum的值。根据labelNum的值,不同的颜色会被添加到dotCol向量。#如果labelNum是3,将额外的颜色添加到dotCol。同样,如果labelNum是4或大于4,会#使用rainbow()函数添加不同的颜色。

xlabel=vector()

dotCol=c(2,3)

if(labelNum==3){

dotCol=c(2,3,4)

}

if(labelNum==4){

dotCol=c(2,3,4,5)

}

if(labelNum>4){

dotCol=rainbow(labelNum)

}

for(j in 1:labelNum){

xlabel=c(xlabel,names(tab1[j]) )

}

#设定p值格式

pval=ifelse(pValue<0.001,”<0.001″,paste0(“=”,sprintf(“%.03f”,pValue)))

#绘制临床相关性箱线图

#用boxplot()函数绘制箱线图,显示基因表达在不同临床分组间的分布情况。

#使用beeswarm()函数绘制点图(beeswarm图),将数据点分布在箱线图附近,以更清晰地显示分布情况。

b = boxplot(expression ~ clinical, data = rt1,outline = FALSE, plot=F)

yMin=min(b$stats)

yMax = max(b$stats/5+b$stats)

#计算了箱线图中的y轴范围。b$stats是boxplot函数计算的统计信息,yMin设置为最小值,yMax设置为最大值的五分之一加上最大值。

n = ncol(b$stats)

outPdf=paste0(“cliCor.”,i,”_”,clinical,”.pdf”)

width=ifelse(clinical==”diagnosis”,8,7)

#根据clinical的值,设置PDF文件的宽度,如果clinical是”diagnosis”,宽度为8,否则为7。

pdf(file=outPdf,width = width,height = 5)

par(mar = c(4.5,6,3,3))

boxplot(expression ~ clinical, data = rt1,names=xlabel,

ylab = “Protein expression”,main=paste0(i,” (p”,pval,”)”),xlab=clinical,

cex.main=1.3, cex.lab=1.2, cex.axis=1.1,ylim=c(yMin,yMax),outline = FALSE)

beeswarm(expression ~ clinical, data = rt1, col =dotCol, lwd=0.1, pch = 16, add = TRUE, corral=”wrap”)

#绘制箱线图,其中names参数设置为之前定义的xlabel向量,y轴标签设置为”Protein expression”,主标题由i和pval组成,x轴标签设置为clinical的值,调整了标题、标签和轴的字体大小。

dev.off()

}

}

geneClinical=c(i,clinicalPvalVector,sigSum)

outTab=rbind(outTab,geneClinical)

#将每个基因与各临床变量的相关性分析结果存储在数据框 outTab 中。

#设置outTab 的列名为基因名、各临床变量名、以及一个额外的列 “SigNum”,表示显著性相关的次数。

#将 outTab 数据框写入名为 “cliCorResult.xls” 的文件,保存分析结果。

}

write.table(outTab,file=”cliCorResult.xls”,sep=”\t”,col.names=F,row.names=F,quote=F)

总之基因与临床数据的相关性分析,生成了箱线图和点图来展示相关性,最终将分析结果写入文件。这可以帮助研究人员理解基因与临床变量之间的关系。下期将为你带来更多R语言的骚操作技巧,以下推荐的是一个多功能的生信平台。

云生信平台链接:http://www.biocloudservice.com/home.html。

云生信平台链接:http://www.biocloudservice.com/home.html。

云生信平台链接:http://www.biocloudservice.com/home.html。