解锁数据奥秘:用pheatmap打造精美热图
一、数据的准备
二、Pheatmap R包装载
install.packages("pheatmap")
install.packages("limma ")
library(pheatmap)
library("limma")
公众号后台回复“111”
领取本篇代码、基因集或示例数据等文件
文件编号:240423
需要租赁服务器的小伙伴可以扫码添加小果,此外小果还提供生信分析,思路设计,文献复现等,有需要的小伙伴欢迎来撩~
三、样品文件的差异分析处理
setwd("F:\ 96glycolysis\09.glyGeneExp\m6a\8")
inputFile="sampleExp.txt"
#输入文件
pvalFilter=0.05
#p值临界值
logFCfilter=0
#logFC临界值
conNum=41 #normal组样品数目
treatNum=476 #tumor组样品数目
#读取输入文件
outTab=data.frame()
grade=c(rep(1,conNum),rep(2,treatNum))
rt=read.table(inputFile,sep="t",header=T,check.names=F)
rt=as.matrix(rt)
rownames(rt)=rt[,1]
exp=rt[,2:ncol(rt)]
dimnames=list(rownames(exp),colnames(exp))
data=matrix(as.numeric(as.matrix(exp)),nrow=nrow(exp),dimnames=dimnames)
data=avereps(data)
data=data[rowMeans(data)>0,]
#差异分析
for(i in row.names(data)){
geneName=unlist(strsplit(i,"\|",))[1]
geneName=gsub("\/", "_", geneName)
rt=rbind(expression=data[i,],grade=grade)
rt=as.matrix(t(rt))
wilcoxTest<-wilcox.test(expression ~ grade, data=rt)
conGeneMeans=mean(data[i,1:conNum])
treatGeneMeans=mean(data[i,(conNum+1):ncol(data)])
logFC=log2(treatGeneMeans)-log2(conGeneMeans)
pvalue=wilcoxTest$p.value
conMed=median(data[i,1:conNum])
treatMed=median(data[i,(conNum+1):ncol(data)])
diffMed=treatMed-conMed
if( ((logFC>0) & (diffMed>0)) | ((logFC<0) & (diffMed<0)) ){
outTab=rbind(outTab,cbind(gene=i,conMean=conGeneMeans,treatMean=treatGeneMeans,logFC=logFC,pValue=pvalue))
}
}
#输出所有基因的差异情况
write.table(outTab,file="all.txt",sep="t",row.names=F,quote=F)
#输出差异表格
outDiff=outTab[(abs(as.numeric(as.vector(outTab$logFC)))>logFCfilter & as.numeric(as.vector(outTab$pValue)) <pvalFilter),]< span></pvalFilter),]<>
write.table(outDiff,file="diff.xls",sep="t",row.names=F,quote=F)
write.table(outDiff,file="diff.txt",sep="t",row.names=F,quote=F)
#输出差异基因的表达文件
heatmap=rbind(ID=colnames(data[as.vector(outDiff[,1]),]),data[as.vector(outDiff[,1]),])
write.table(heatmap,file="diffGeneExp.txt",sep="t",col.names=F,quote=F)
四、文件的导入
依然先将工作路径进行修改设置
setwd("F:\ 96glycolysis\09.glyGeneExp\m6a\8")
rt=read.table("risk.txt",sep="t",header=T,row.names=1,check.names=F)
#读取输入文件
rt=rt[order(rt$riskScore),]
#按照riskScore对样品排序
#使用read.table()函数读取名为"risk.txt"的数据文件,并存储在变量rt中。
五、参数的调整与图形的保存
1.风险曲线
2.生存状态图
3.风险热图
#风险曲线
riskClass=rt[,"risk"]
#从数据框rt中提取名为"risk"的列,将其赋值给riskClass变量。这个列应该包含风险等级的信息。
lowLength=length(riskClass[riskClass=="low"])
#计算风险等级为"low"的数量,将结果赋值给lowLength变量。
highLength=length(riskClass[riskClass=="high"])
#计算风险等级为"high"的数量,将结果赋值给highLength变量。
line=rt[,"riskScore"]
#从数据框rt中提取名为"riskScore"的列,将其赋值给line变量。这个列应该包含风险评分的信息。
line[line>10]=10
#将line中大于10的值设为10,限制风险评分的范围。(小果设定的值是10,小伙伴们可根据自己的数据集进行修改~)
pdf(file="riskScore.pdf",width = 10,height = 5)
#设置宽度、高度。(小伙伴们可根据自己需求修改参数)
plot(line,
type="p",
pch=20,
xlab="Patients (increasing risk socre)",
ylab="Risk score",
col=c(rep("green",lowLength),
rep("red",highLength)))
#绘制散点图,横坐标为患者,风险评分递增,纵坐标为风险评分,根据风险等级为"low"和"high"的数量来设定颜色(小伙伴们可根据自己的喜好修改~)
#plot()是R语言中非常常用且功能强大的绘图内置函数,用于绘制各种类型的图形,如散点图、折线图、直方图等
abline(v=lowLength,lty=5)
#在图中添加一条垂直虚线
legend("topleft",c("Highrisk","lowRisk"),bty="n",pch=19,col=c("red","green"),cex=1.2)
#在左上角添加图例,分别表示"Highrisk"和"lowRisk",颜色为红色和绿色。
dev.off()
#关闭PDF文件绘图设备,保存图表
color=as.vector(rt$fustat)
color[color==1]="red"
color[color==0]="blue"
pch=as.vector(rt$fustat)
pch[pch==1]=15
pch[pch==0]=19
pdf(file="survStat.pdf",width = 10,height = 5)
plot(rt$futime,
pch=pch,
xlab="Patients (increasing risk socre)",
ylab="Survival time (years)",
col=color)
legend("topleft", c("Dead", "Alive"),bty="n",pch=c(15,19),col=c("red","blue"),cex=1.2)
abline(v=lowLength,lty=2)
dev.off()
#风险热图
rt1=rt[c(3:(ncol(rt)-2))]
#从数据框rt中选取第3列到倒数第3列的数据,并将其存储在新的数据框rt1中。(小伙伴们如果选用的数据集和小果不同的话记得要修改哦~)
rt1=t(rt1)
#对数据框rt1进行转置,将行列交换,以便后续生成热图时行表示样本,列表示特征。
rt1=log2(rt1+1)
#对数据框rt1中的所有元素加1后取对数(以2为底),对数据进行对数变换,以便更好地展示数据的差异。
annotation=data.frame(type=rt[,ncol(rt)])
#创建一个名为annotation的数据框,其中包含一个名为type的列,列中的值来自rt数据框的最后一列。
rownames(annotation)=rownames(rt)
#将annotation数据框的行名设置为rt数据框的行名,以便后续在热图中添加注释信息。
pdf(file="heatmap.pdf",width = 10,height = 5)
#和上面的一样,设置宽和高。
pheatmap(rt1,
annotation=annotation,
cluster_cols = FALSE,
cluster_rows = FALSE,
fontsize_row=11,
show_colnames = F,
fontsize=7,
fontsize_col=3,
color = colorRampPalette(c("green", "black", "red"))(50) )
#用pheatmap()函数生成热图,其中:rt1——要展示的数据;annotation——包含了样本类别信息;cluster_cols和cluster_rows——是否对列和行进行聚类,这里小果选择了FALSE,即生成热图时,行和列的顺序将保持原始数据中的顺序,不会经过聚类算法重新排列;fontsize_row和fontsize_col——行和列标签的字体大小;show_colnames——是否显示列名,color——指定热图的颜色渐变,这里小果使用了从绿色到红色的渐变,共50个颜色。
dev.off()
#关闭并保存
小果还提供思路设计、定制生信分析、文献思路复现;有需要的小伙伴欢迎直接扫码咨询小果,竭诚为您的科研助力!
定制生信分析
服务器租赁
扫码咨询小果
往期回顾
01 |
02 |
03 |
04 |