首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【DoMultiBarHeatmap】单细胞热图

【DoMultiBarHeatmap】单细胞热图

作者头像
生信菜鸟团
发布2025-07-24 15:22:31
发布2025-07-24 15:22:31
22900
代码可运行
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团
运行总次数:0
代码可运行

我们之前学了complexheatmap包,几乎可以囊括所有热图的绘制方式,那单细胞数据的热图又该怎么画?

Single-cell RNA sequencing identifies molecular biomarkers predicting late progression to CDK4/6 inhibition in patients with HR+/HER2- metastatic breast cancer

首先,假设我们手里有一个seurat对象。

代码语言:javascript
代码运行次数:0
运行
复制
# 1. 标准化数据
seurat_object <- NormalizeData(seurat_object)

# 2. 选择变量基因
seurat_object <- FindVariableFeatures(seurat_object)

# 3. 缩放所有基因(或你感兴趣的基因)
seurat_object <- ScaleData(seurat_object)

DoHeatmap

代码语言:javascript
代码运行次数:0
运行
复制
pdf(paste0('Figure1/Figure1g.pdf'), width =8, height =7)

DoHeatmap(seurat_object,
          features = VariableFeatures(seurat_object)[1:10],
          group.by ="donor",
          group.colors = brewer.pal(n =3, name ="Set2"))+
  scale_fill_viridis()+
  theme(text = element_text(size =10),
        legend.text = element_text(size=10))+
  guides(fill=guide_legend(title=" "))
)

dev.off()

这是seurat自带的函数,也非常方便。

有没有其他方式呢?


DoMultiBarHeatmap

DoMultiBarHeatmap 是一个用于 Seurat 对象的 R 包,旨在扩展 Seurat 的 DoHeatmap 函数,生成带有多个注释条的热图。该函数最初由 Arjun Arkal Rao 在 Seurat 的 GitHub 讨论中提出,并由 Ellie Fewings 在其 GitHub 中实现和发布 。

代码语言:javascript
代码运行次数:0
运行
复制
devtools::install_github("elliefewings/DoMultiBarHeatmap")

#Load library
library(DoMultiBarHeatmap)

同时还需要安装这些包:

代码语言:javascript
代码运行次数:0
运行
复制
library(ggplot2)
library(rlang)
library(Seurat)
library(magrittr)

最终完整版——

代码语言:javascript
代码运行次数:0
运行
复制
library(ggplot2)
library(viridis)
library(rlang)
library(Seurat)
library(magrittr)
library(RColorBrewer)
library(patchwork)

devtools::install_github("elliefewings/DoMultiBarHeatmap")
#Load library
library(DoMultiBarHeatmap)


# 4. 画图
unique(seurat_object$donor)
unique(seurat_object$celltype.l1)

library(RColorBrewer)

# 创建命名颜色向量
group.colors <- setNames(
  brewer.pal(n =7, name ="Set2"),
c("batch1","batch2","Progenitor cells","T cell","Mono/DC","B cell","NK")
)

# 绘图
DoMultiBarHeatmap(
  object = seurat_object,
  features = VariableFeatures(seurat_object)[1:10],
  group.by ="donor",
  additional.group.by ="celltype.l1"
)+
  scale_fill_viridis_c()+# 连续变量推荐用scale_fill_viridis_c
  scale_color_manual(values = group.colors)+
  theme(text = element_text(size =10),
        legend.text = element_text(size =10))+
  guides(fill = guide_legend(title =""))

小结

相较于 Seurat 自带的 DoHeatmapDoMultiBarHeatmap 的优势如下:

1. 多分组注释条 (Multiple Bar Annotations)

  • DoHeatmap: 只能添加单一的分组注释(一般是在热图上方显示单个分组的颜色条),比如按细胞类型或样本分组。
  • DoMultiBarHeatmap: 支持在热图上方添加多个分组注释条,比如同时显示 group.by(如 donor)和 additional.group.by(如 celltype.l1)两个不同维度的注释,使得信息更丰富直观。 这对于多维度的细胞分组信息展示非常实用。

2. 更灵活的分组变量支持

  • DoHeatmap 的分组变量支持较简单,参数设计较少。
  • DoMultiBarHeatmap 允许用户传入多个分组变量,并且自动在热图上方生成对应的多个条形图注释,同时支持自定义注释颜色映射。

3. 视觉效果和展示效果更丰富

  • DoHeatmap 的注释通常是单一条形,表达热图本身以热图形式展示基因表达。
  • DoMultiBarHeatmap 在保留热图展示的基础上,可以更好地整合分组信息和细胞属性,增强图形的层次感,便于观察不同细胞群体和分组的表达差异。

4. 设计初衷不同

  • DoHeatmap 是 Seurat 包的核心可视化函数,定位于展示基因在细胞群体中的表达。
  • DoMultiBarHeatmap 是基于 Seurat 的拓展工具,主要用于同时展示多个分组维度下的细胞组成信息和基因表达,是“热图+多条形注释”的整合型工具,适合多条件多分组的数据展示。

5. 个性化体验

  • DoMultiBarHeatmap 支持更多定制参数,比如多条注释的颜色、位置、是否显示条形图等,方便用户根据需要调整图形细节。

功能特点

DoHeatmap

DoMultiBarHeatmap

多个分组注释条

不支持(单分组注释)

支持(支持多个分组注释条)

分组变量灵活性

单一

多个

视觉效果

基本热图+单注释

热图+多条形注释,层次更丰富

适用场景

单一条件下基因表达展示

多条件、多分组综合展示

定制化和扩展性

基础

更强

ComplexHeatmap

ComplexHeatmap 当然也支持做单细胞的热图了!ComplexHeatmap:终极热图绘制工具

代码语言:javascript
代码运行次数:0
运行
复制
library(Seurat)
library(ComplexHeatmap)
library(circlize)
library(viridis)

# 取表达矩阵(用 scale.data 做例子)
expr_mat <- GetAssayData(seurat_object, slot ="scale.data")[VariableFeatures(seurat_object)[1:10],]

# 细胞的两个分组信息
group1 <- seurat_object$donor
group2 <- seurat_object$celltype.l1

# 转为因子,方便后续定义颜色
group1 <- factor(group1)
group2 <- factor(group2)


# donor颜色
donor_colors<- structure(viridis(length(levels(group1))),names= levels(group1))

# celltype颜色
celltype_colors<- structure(rainbow(length(levels(group2))),names= levels(group2))


col_anno <- HeatmapAnnotation(
  Donor = group1,
  CellType = group2,
  col =list(
    Donor = donor_colors,
    CellType = celltype_colors
),
  annotation_legend_param =list(
    Donor =list(title ="Donor"),
    CellType =list(title ="Cell Type")
)
)


Heatmap(
  expr_mat,
  name ="Expression",
  top_annotation = col_anno,
  show_row_names =TRUE,
  show_column_names =FALSE,
  cluster_rows =TRUE,
  cluster_columns =TRUE,
  heatmap_legend_param =list(title ="Scaled Expression")
)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-07-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DoHeatmap
  • DoMultiBarHeatmap
  • 小结
    • 1. 多分组注释条 (Multiple Bar Annotations)
    • 2. 更灵活的分组变量支持
    • 3. 视觉效果和展示效果更丰富
    • 4. 设计初衷不同
    • 5. 个性化体验
  • ComplexHeatmap
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档