ComplexHeatmap中离散映射命名向量配色不生效问题求助
问题分析与解决方法
核心问题
你的代码颜色映射失效主要有两个原因:
- 类别名称大小写不匹配:
value中的"Normal"(首字母大写)和col向量里的normal(全小写)名称不一致,离散映射要求命名向量的名称必须和value中的类别完全匹配(包括大小写)。 - 注释未正确关联:你创建了
SingleAnnotation但未将其整合到最终的热图注释流程中,且未调用Heatmap函数完成绘图。
修正后的代码
方式1:修正SingleAnnotation并完成热图绘制
library(ComplexHeatmap) library(circlize) library(magick) mat = as.matrix(expr) type = colnames(mat) # 修正颜色向量的命名,与类别值大小写完全匹配 sample_col = c(Normal="#64F0F0", kirp="#FF0000", kirc="#FFA026", kich="#7E2E1F") # 创建SingleAnnotation并整合到HeatmapAnnotation sa = SingleAnnotation(name="Sample type", value=type, col=sample_col) ha = HeatmapAnnotation(annotation_name_side = "left", sa) # 绘制热图(必须调用Heatmap函数传入矩阵和注释) Heatmap(mat, top_annotation = ha)
方式2:直接在HeatmapAnnotation中指定颜色(更简洁)
library(ComplexHeatmap) library(circlize) library(magick) mat = as.matrix(expr) type = colnames(mat) # 定义匹配的颜色命名向量 sample_col = c(Normal="#64F0F0", kirp="#FF0000", kirc="#FFA026", kich="#7E2E1F") # 直接在HeatmapAnnotation中指定type注释的颜色 ha = HeatmapAnnotation( type = type, annotation_name_side = "left", col = list(type = sample_col) # 用list绑定注释项与对应颜色 ) # 绘制热图 Heatmap(mat, top_annotation = ha)
补充:SingleAnnotation官方文档col参数中文翻译
与值对应的颜色。若为离散型映射,col需为命名向量,其名称需与value中的可能值一一对应。
内容的提问来源于stack exchange,提问作者melolilili
相关产品推荐
相关产品推荐

