在上一篇文章中,我们已经对基因进行了差异分析,接下来我们根据结果中的FDR值和FC值筛选出上调基因和下调基因(上调基因:基因转录成mRNA时受到正向调控,促进表达;下调基因:转录成mRNA时受到抑制,表达量减少),并绘制成火山图与热图。
第一部分:火山图
首先,加载所需的包并导入数据:
library(ggplot2) diff_stat <- read.csv("F:/公众号/图文素材/绘制火山图&热图/data.csv", header = TRUE, row.names = 1)

其次,筛选上调趋势数据和下调趋势数据,对于Fold Change值和p值阈值的选择,还需在实际的分析中视情况而定,本文以|log2FC| ≥2以及FDR p-value < 0.05作为差异OTUs的判断依据:
diff_stat[which(diff_stat$FDR < 0.05 & diff_stat$logFC >= 2),'diff'] <- 'up' #上调趋势筛选 diff_stat[which(diff_stat$FDR < 0.05 & diff_stat$logFC <= -2),'diff'] <- 'dowm' #下调趋势筛选 diff_stat[!(diff_stat$diff %in% c('up', 'dowm')),'diff'] <- 'no'
最后,我们根据判断依据,将OTUs划分为“富集”(up)、“下降”(down)以及“无差异”(no)三种水平。然后,在作图时根据预先划分的OTUs差异水平对点分别着色。火山图实质上就是一种散点图,ggplot2作为一个非常好用的作图R包,我们直接用ggplot2进行绘制:
p1 <- ggplot(diff_stat, aes(x = logFC, y = -log10(FDR))) + geom_point(aes(color = diff), size = 0.5) + scale_colour_manual(limits = c('up', 'dowm', 'no'), values = c('blue', 'red', 'gray40'), labels = c('Enriched OTUs', 'Depleted OTUs', 'No diff OTUs')) + labs(x = 'log2 Fold Change', y = '-log10 FDR p-value')

我们可以对图进行美化,修改背景颜色、添加分界线、调整标签位置:
p1 <- p1 + theme(panel.grid.major = element_line(color = 'gray', size = 0.2), panel.background = element_rect(color = 'black', fill = 'transparent')) + geom_vline(xintercept = c(-2, 2), color = 'gray', linetype = 2, size = 0.5) + geom_hline(yintercept = -log10(0.05), color = 'gray', linetype = 2, size = 0.5) + theme(legend.title = element_blank(), legend.key = element_rect(fill = 'transparent'), legend.background = element_rect(fill = 'transparent'), legend.position = c(0.2, 0.9))

知识笔记
第二部分:热图
首先,加载所需的包并导入数据:
library(pheatmap) sign.gene <- read.csv("F:/公众号/图文素材/绘制火山图&热图/data.csv", header = T , row.names = 1)
其次,筛选数据:
sign.gene.FDR <- sign.gene$FDR < 0.05 sign.gene.fc <- abs(sign.gene$logFC) > 2 sign.gene.all <- sign.gene.FDR & sign.gene.fc sign.gene.real <- sign.gene[sign.gene.all, ]
如果样本中存在缺失值(例如:NA),我们可以用na.omit()进行删除:
sign.gene.real<-na.omit(sign.gene.real)
最后,绘制热图,并用基因标签代替基因ID作为热图的行标签:
pheatmap(log2(sign.gene.real[,3:85]+1), labels_row = sign.gene$Symbol)

也可以根据各自的需求进行美化:
pheatmap(log2(sign.gene.real[,3:85]+1), labels_row = sign.gene$Symbol, main="Heatmap", color = colorRampPalette(c("blue","white","red"))(256) )

说明:
Color参数中的256是指色阶值,也可以理解为色阶分辨率,数值越大,热图上颜色越丰富,一般设置为256。
知识笔记
总结
从热图上可以看出,所筛选出的差异基因并没有很好的区分出突变组和未突变组,所以在基因的筛选上,或者差异分析模型的选择上,需进行进一步的调整。
参考文章
获取代码
以下是我的个人公众号,该篇的数据及代码可在公众号中回复“火山图&热图”即可获得,谢谢大家支持。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176957.html原文链接:https://javaforall.net
