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

如何绘制含Jaccard指数数值的热图并展示亚型元素与得分?

解决Jaccard指数热图绘制问题

问题根源

你的原代码逻辑是正确的,但和在线工具的差异大概率来自可视化细节缺失(比如未显示Jaccard数值、未标注分组对应的元素集合、保留了聚类树),或是二分矩阵的构建未严格遵循集合逻辑(Jaccard基于元素存在/不存在,而非计数)。


测试数据优化方案

以下代码调整了可视化参数,同时确保Jaccard计算的严谨性,结果更贴近在线工具的展示效果:

library(vegan)
library(pheatmap)

# 测试数据
df <- data.frame(tumor_type = c("tumor1", "tumor1", "tumor1", "tumor2", "tumor2", "tumor3", "tumor4", "tumor4"), 
                 genes = c("geneA", "geneB", "geneC", "geneA", "geneD", "geneD", "geneA", "geneD"))

# 构建严格的二分矩阵:行=tumor_type,列=genes,存在为1,不存在为0
binary_matrix <- table(df$tumor_type, df$genes) %>% as.matrix()
binary_matrix[binary_matrix > 0] <- 1  # 转换为集合存在标记,忽略重复

# 计算Jaccard相似度(1 - Jaccard距离)
jaccard_sim <- 1 - as.matrix(vegdist(binary_matrix, method = "jaccard"))

# 准备行注释:展示每个肿瘤亚型对应的基因集合
annot_row <- data.frame(Genes = sapply(rownames(jaccard_sim), function(x) {
  paste(colnames(binary_matrix)[binary_matrix[x,] == 1], collapse = ", ")
}))

# 绘制热图,匹配在线工具的核心特征
pheatmap(jaccard_sim,
         annotation_row = annot_row,
         display_numbers = TRUE,  # 显示单元格的Jaccard得分
         number_format = "%.2f",
         main = "肿瘤亚型Jaccard相似度热图",
         treeheight_row = 0, treeheight_col = 0,  # 关闭聚类树(若在线工具无此结构)
         cellwidth = 80, cellheight = 80)

实际GO Term数据处理方案

针对你提供的Comparison-GO Term数据集,按以下步骤绘制符合预期的热图:

library(vegan)
library(pheatmap)

# 实际数据子集
actual_df <- structure(list(Comparison = c("M0_vs_M1", "M0_vs_M1", "M0_vs_M1", 
"M0_vs_M1", "M0_vs_M1", "M0_vs_M1", "M4_vs_M5", "M4_vs_M5", "M4_vs_M5", 
"M4_vs_M5", "M4_vs_M5", "M4_vs_M5"), Term = c("GO:0042742", "GO:0009617", 
"GO:0006959", "GO:0006956", "GO:0006958", "GO:0002455", "GO:0048863", 
"GO:0048864", "GO:0001667", "GO:0048483", "GO:0051129", "GO:0010977"
)), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 3266L, 3267L, 3268L, 
3269L, 3270L, 3271L), class = "data.frame")

# 构建GO Term二分矩阵
binary_go_matrix <- table(actual_df$Comparison, actual_df$Term) %>% as.matrix()
binary_go_matrix[binary_go_matrix > 0] <- 1

# 计算Jaccard相似度
jaccard_go_sim <- 1 - as.matrix(vegdist(binary_go_matrix, method = "jaccard"))

# 准备行注释:换行展示每个Comparison的GO Term列表
annot_go_row <- data.frame(GO_Terms = sapply(rownames(jaccard_go_sim), function(x) {
  paste(colnames(binary_go_matrix)[binary_go_matrix[x,] == 1], collapse = "\n")
}))

# 绘制热图
pheatmap(jaccard_go_sim,
         annotation_row = annot_go_row,
         display_numbers = TRUE,
         number_format = "%.2f",
         main = "Comparison组GO Term Jaccard相似度热图",
         treeheight_row = 0, treeheight_col = 0,
         cellwidth = 100, cellheight = 100,
         fontsize_row = 10, fontsize_col = 10)

核心调整说明

  • 二分矩阵修正:将计数转换为1,确保Jaccard计算基于元素集合的存在/不存在(符合Jaccard指数的定义)
  • 数值显示:添加display_numbers直接展示相似度数值,和在线工具对齐
  • 注释增强:添加行注释展示每个分组对应的元素集合,让热图信息更直观
  • 聚类控制:关闭聚类树(若在线工具无聚类结构),避免干扰核心信息展示
  • 可视化优化:调整单元格大小、字体大小,提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:50:34