如何为Seurat DimHeatmap函数生成的图表添加对应图例
Seurat包DimHeatmap添加PCA取值对应图例的实现方法
没有适配所有Seurat可视化图表的统一图例添加方案,不同Seurat绘图函数的底层渲染逻辑有差异,针对DimHeatmap添加对应PCA组分取值的颜色图例,可直接用以下两种方案实现:
方案1:原生参数调整(最简便)
Seurat v4及以上版本的DimHeatmap内置了图例显示控制参数,默认状态下图例是关闭的,你只需要在原有代码中补充两个参数即可:
raster = FALSE:关闭栅格化渲染,避免连续图例显示异常legend = TRUE:开启颜色标尺图例,图例颜色会自动对应PCA组分的取值高低
修改后的可直接运行代码如下:
DimHeatmap(norm_data3, dims = 1, cells = 500, balanced = TRUE, raster = FALSE, legend = TRUE)
注意:Seurat v3及更早的老版本中,
DimHeatmap底层基于基础绘图系统实现,不支持原生渲染ggplot风格的连续值图例,这种情况请使用第二种自定义绘制方案。
方案2:提取数据自定义绘制(灵活度最高)
如果原生参数生成的图例不符合排版要求,比如需要修改图例颜色、位置、标注规则,可以先提取DimHeatmap绘图用到的所有中间数据,再用热图包自行绘制,完全自定义图例样式:
- 首先提取绘图所需的PC得分、目标细胞、表达矩阵数据
# 提取PCA降维结果中对应维度的细胞得分 pc1_scores <- Embeddings(norm_data3, reduction = "pca")[, 1] # 按照DimHeatmap的balanced参数逻辑,取PC1得分最高和最低的各250个细胞,共500个 sorted_cell_names <- names(sort(pc1_scores, decreasing = TRUE)) plot_cells <- c(head(sorted_cell_names, 250), tail(sorted_cell_names, 250)) # 提取高变基因在目标细胞中的归一化表达矩阵作为热图输入 plot_exp_matrix <- GetAssayData(norm_data3, assay = "RNA", layer = "data")[VariableFeatures(norm_data3), plot_cells]
- 用
pheatmap绘制带自定义PC取值图例的热图
library(pheatmap) # 构造细胞层面的PC得分注释 cell_annotation <- data.frame(PC1得分 = pc1_scores[plot_cells]) rownames(cell_annotation) <- plot_cells pheatmap(plot_exp_matrix, cluster_rows = F, cluster_cols = F, show_colnames = F, scale = "row", annotation_col = cell_annotation, # 自动生成对应PC1取值的连续颜色图例 main = "PC1维度热图")
如果需要调整图例的配色、刻度、显示位置,直接修改pheatmap的annotation_colors、legend_breaks、legend_pos等参数即可,可定制性远高于原生DimHeatmap函数。
内容的提问来源于stack exchange,提问作者algebroo
相关产品推荐
相关产品推荐

