在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()函数绘制热图。
完整正确代码步骤
- 安装并加载ComplexHeatmap包:
# 首次运行先安装 install.packages("ComplexHeatmap") # 加载包 library(ComplexHeatmap)
- 规范数据格式:
# 构造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)
- 定义注释颜色并绘制热图:
# 定义地区与颜色的映射关系 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
相关产品推荐
相关产品推荐

