我们之前学了complexheatmap包,几乎可以囊括所有热图的绘制方式,那单细胞数据的热图又该怎么画?
Single-cell RNA sequencing identifies molecular biomarkers predicting late progression to CDK4/6 inhibition in patients with HR+/HER2- metastatic breast cancer
首先,假设我们手里有一个seurat对象。
# 1. 标准化数据
seurat_object <- NormalizeData(seurat_object)
# 2. 选择变量基因
seurat_object <- FindVariableFeatures(seurat_object)
# 3. 缩放所有基因(或你感兴趣的基因)
seurat_object <- ScaleData(seurat_object)
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
是一个用于 Seurat 对象的 R 包,旨在扩展 Seurat 的DoHeatmap
函数,生成带有多个注释条的热图。该函数最初由 Arjun Arkal Rao 在 Seurat 的 GitHub 讨论中提出,并由 Ellie Fewings 在其 GitHub 中实现和发布 。
devtools::install_github("elliefewings/DoMultiBarHeatmap")
#Load library
library(DoMultiBarHeatmap)
同时还需要安装这些包:
library(ggplot2)
library(rlang)
library(Seurat)
library(magrittr)
最终完整版——
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 自带的 DoHeatmap
,DoMultiBarHeatmap
的优势如下:
group.by
(如 donor)和 additional.group.by
(如 celltype.l1)两个不同维度的注释,使得信息更丰富直观。 这对于多维度的细胞分组信息展示非常实用。功能特点 | DoHeatmap | DoMultiBarHeatmap |
---|---|---|
多个分组注释条 | 不支持(单分组注释) | 支持(支持多个分组注释条) |
分组变量灵活性 | 单一 | 多个 |
视觉效果 | 基本热图+单注释 | 热图+多条形注释,层次更丰富 |
适用场景 | 单一条件下基因表达展示 | 多条件、多分组综合展示 |
定制化和扩展性 | 基础 | 更强 |
ComplexHeatmap
当然也支持做单细胞的热图了!ComplexHeatmap:终极热图绘制工具
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")
)