R语言ComplexHeatmap用column_split实现热图X轴4分区
问题原因
代码未实现4分区的核心错误是column_split参数传值错误:你当前将整个tdfdarkgrey数据集传入该参数,但column_split需要接收与热图列数长度一致、顺序一一对应的分组向量,传入完整数据集会导致函数无法识别你指定的X1分组列,自然无法输出目标4分区效果。
修正实现步骤
- 第一步:分离绘图数值矩阵与分组向量
你的tdfdarkgrey中X1是分组列(因子类型,非数值),其余列是用于绘制热图的数值型特征值,需要先拆分两类数据,避免非数值列干扰热图绘制:library(ComplexHeatmap) # 提取X1列作为分组向量 split_group <- tdfdarkgrey$X1 # 可选:固定4个分组的展示顺序,避免自动排序打乱亚型排列 split_group <- factor(split_group, levels = c("Proneural", "Neural", "Classical", "Mesenchymal")) # 提取纯数值矩阵作为热图输入,剔除分组列X1 heatmap_mat <- data.matrix(tdfdarkgrey[, colnames(tdfdarkgrey) != "X1"]) - 第二步:传入正确参数绘制热图
将column_split参数替换为单独提取的分组向量即可实现4分区效果,其余你原代码的参数设置(关闭聚类、隐藏标签等)无需调整:Heatmap(heatmap_mat, column_split = split_group, show_row_names = FALSE, show_row_dend = FALSE, show_column_dend = FALSE, show_column_names = FALSE, show_parent_dend_line = FALSE, cluster_rows = FALSE, cluster_columns = FALSE, column_title = NULL, heatmap_legend_param = list(title = "Scale"))
注意事项
- 必须保证分组向量
split_group的长度和热图矩阵heatmap_mat的列数完全相等,且向量顺序和矩阵的列顺序一一对应,否则会出现分组错位。 - 保持
cluster_columns = FALSE时,同一分组内的样本会按照你原始数据集的列顺序排列聚合;如果需要同组内样本按相似性聚类,可将该参数改为TRUE,不会影响4个大分区的划分。
内容的提问来源于stack exchange,提问作者driver
相关产品推荐
相关产品推荐

