You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二进制蛋白质组数据heatmap绘制及两类聚类问题求助

二进制蛋白质组数据热图修正与聚类实现

问题背景

使用0(未检测到蛋白)、1(检测到蛋白)的二进制质谱蛋白质组数据绘制热图,期望呈现0-1对应的双色效果,并将蛋白按检测率分为两类聚类,但默认绘制的热图呈现多色,不符合预期。

错误原因

R基础包的heatmap()函数默认会对行数据进行z-score标准化,将原始的0/1二进制值转换为连续的标准化数值,导致热图出现多色渐变,而非保留原始的二进制颜色映射。

修正方案与聚类实现

1. 基础热图修正(保留二进制双色)

通过关闭行标准化、指定双色映射,即可得到符合预期的0-1热图:

# 构造数据
data = data.frame (a = c(0,0,0,1,0,1,0,1),
                   b = c(1,1,1,0,0,0,0,1),
                   c = c(0,1,0,1,1,0,1,0),
                   d = c(1,1,0,1,0,0,0,1))

# 转换为矩阵并设置行列名
data_matrix = as.matrix(data)
row.names(data_matrix) = c("Protein_1", "Protein_2", "Protein_3", "Protein_4","Protein_5","Protein_6","Protein_7","Protein_8")
colnames(data_matrix) = c("Patient_1","Patient_2","Patient_3","Patient_4")

# 绘制修正后的二进制热图
heatmap(data_matrix, 
        scale = "none",  # 核心:关闭行标准化
        col = c("white", "darkblue"),  # 0对应白色,1对应深蓝色
        main = "Binary Proteomic Heatmap",
        xlab = "Patients",
        ylab = "Proteins")

2. 实现蛋白两类聚类与分组展示

通过计算蛋白的阳性检测率(样本中检测到的比例),设定阈值划分两类,再结合pheatmap包实现带分组注释的聚类热图(比基础热图更直观):

# 安装并加载pheatmap(首次使用需安装)
# install.packages("pheatmap")
library(pheatmap)

# 计算每个蛋白的阳性检测率
protein_pos_rate = rowMeans(data_matrix)
# 按阈值(示例为0.5)划分两类:高检测率/低检测率
protein_groups = ifelse(protein_pos_rate >= 0.5, "High Detection", "Low Detection")
# 构建行注释数据框
annotation_row = data.frame(Group = protein_groups)
rownames(annotation_row) = rownames(data_matrix)

# 绘制带分组注释的聚类热图
pheatmap(data_matrix,
         scale = "none",
         color = c("white", "darkblue"),
         annotation_row = annotation_row,  # 添加蛋白分组注释
         main = "Binary Proteomic Heatmap with Protein Clusters",
         show_rownames = TRUE,
         show_colnames = TRUE)

说明

  • 若需调整聚类方式,可在heatmap()或pheatmap()中通过hclustfun参数指定聚类算法;
  • 阳性检测率的阈值可根据实际数据调整,比如改为0.3或0.6,适配你的"检测到的蛋白过少"的判定标准。

内容的提问来源于stack exchange,提问作者Maciej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 13:17:05