在R中绘制共现邻接矩阵热图时忽略低于阈值的值
问题:如何在heatmap.2中忽略共现矩阵里低于特定阈值的值?
我有一个共现邻接矩阵(netm),其中大部分值为0。目前使用以下代码绘制热图:
require(gplots) heatmap.2(netm,col=c("gold", "dark orange","orange","yellow"), Rowv=F, Colv=F, dendrogram="none", scale="none", trace="none")
我不想在热图中绘制共现矩阵中低于3的值,请问该怎么操作?
我的共现矩阵数据快照:
bacardi breezer aldi rum white coconut bacardi 0 2 0 1 0 0 breezer 2 0 0 0 0 0 aldi 0 0 0 1 1 0 rum 1 0 1 0 1 1 white 0 0 1 1 0 0 coconut 0 0 0 1 0 0 drinks 0 0 0 1 0 1 daniel 0 0 0 1 0 0
解决方案
嗨,这个需求很好实现!核心思路是把矩阵中低于阈值(这里是3)的值替换成NA,因为heatmap.2会识别NA值,并且可以通过参数指定这些位置的显示颜色(比如设为和背景一致的白色,就相当于“忽略”它们了)。具体步骤如下:
1. 预处理矩阵,替换低于阈值的值为NA
首先定义你的阈值,然后把矩阵中所有小于这个阈值的元素替换成NA(建议复制原矩阵,避免修改原始数据):
# 设置阈值 threshold <- 3 # 复制原矩阵 netm_filtered <- netm # 将低于阈值的值替换为NA netm_filtered[netm_filtered < threshold] <- NA
2. 绘制处理后的热图
在调用heatmap.2时,使用na.color参数指定NA值对应的颜色(推荐设为白色,和背景融合,达到“不显示”的效果):
library(gplots) heatmap.2(netm_filtered, col=c("gold", "dark orange","orange","yellow"), Rowv=F, Colv=F, dendrogram="none", scale="none", trace="none", na.color="white") # 关键参数:设置NA的显示颜色
额外说明
- 如果你不想用
NA,也可以把低于阈值的值设为0,但这样0会被映射到你指定的第一个颜色(gold),无法真正“忽略”,所以用NA是更直观的方案。 - 你也可以根据需求调整
na.color的颜色,比如设为灰色,用来区分空白和真正的0值(不过你的矩阵里0本来就是低共现,所以白色更合适)。
内容的提问来源于stack exchange,提问作者EricA
相关产品推荐
相关产品推荐

