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

在R语言中为层次化热图添加注释条遇问题求助

层次化热图添加注释条报错问题

数据说明

  • 存储归一化值的矩阵df1:
Apple Bananas Oranges Kiwi Pear
5       7      5       3   8
6       2      4       5   9
5       9      3       5   2
  • 水果地区分类注释数据框Annot:
Apple     North America
Bananas   Asia
Oranges   North America
Kiwi      Asia
Pear      North America

需求:为热图添加顶部注释条,将North America设为红色,Asia设为蓝色,观察聚类情况。

尝试的代码及错误

尝试运行的代码:

col = list(Annot = c("North America" = "red", "Asia" = "blue"))
ha = HeatmapAnnotation(df = Annot, col=col)
heatmap(df = df1, scale = "none", cexCol = 0.7, top_annotation = ha)

出现的错误:

Error in heatmap(df = df1, scale = "none", cexCol = 0.7, top_annotation = ha) : 
  argument "x" is missing, with no default

问题原因及解决方法

错误根源是混用了不同工具:HeatmapAnnotation是ComplexHeatmap包的专属函数,但你调用的是R基础包的heatmap()函数,后者不支持top_annotation参数,且参数格式不匹配。正确做法是使用ComplexHeatmap包的Heatmap()函数绘制热图。

完整正确代码步骤

  1. 安装并加载ComplexHeatmap包:
# 首次运行先安装
install.packages("ComplexHeatmap")
# 加载包
library(ComplexHeatmap)
  1. 规范数据格式:
# 构造df1数据框
df1 <- data.frame(
  Apple = c(5,6,5),
  Bananas = c(7,2,9),
  Oranges = c(5,4,3),
  Kiwi = c(3,5,5),
  Pear = c(8,9,2)
)
# 构造Annot并转置,确保列名与df1的列(水果名)匹配
Annot <- data.frame(
  Region = c("North America", "Asia", "North America", "Asia", "North America"),
  row.names = c("Apple", "Bananas", "Oranges", "Kiwi", "Pear")
)
Annot <- t(Annot)
  1. 定义注释颜色并绘制热图:
# 定义地区与颜色的映射关系
col <- list(Region = c("North America" = "red", "Asia" = "blue"))
# 创建顶部注释条
ha <- HeatmapAnnotation(df = Annot, col = col)
# 绘制热图
Heatmap(as.matrix(df1), 
        scale = "none", 
        column_names_gp = gpar(fontsize = 7), # 替代基础包的cexCol设置列名大小
        top_annotation = ha)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 04:01:14