1. 从单细胞数据到相关性热图:为什么我们需要它?
大家好,我是你们的老朋友,一个在生物信息学和单细胞分析领域摸爬滚打了十多年的“老司机”。今天,我想和大家深入聊聊一个在单细胞转录组分析中既常见又至关重要的环节——单细胞亚群相关性分析,以及如何用一张漂亮的三角热图把结果清晰地呈现出来。
在单细胞数据分析里,我们费了九牛二虎之力,用Seurat、Scanpy这些工具把成千上万个细胞分成了不同的亚群(比如T细胞、B细胞、巨噬细胞等)。分完群之后,一个很自然的问题就来了:这些亚群之间,到底有什么关系?是彼此独立,还是存在某种“亲疏远近”?比如,两个T细胞亚群在基因表达模式上是不是更相似?一个髓系祖细胞亚群和一个成熟的巨噬细胞亚群,它们的相关性是高还是低?回答这些问题,对于我们理解细胞类型间的发育轨迹、功能关联,甚至疾病状态下的细胞状态转变,都至关重要。
这时候,相关性分析就成了我们的得力助手。简单来说,它就是计算不同亚群之间基因表达模式的相似程度。计算出的结果是一个相关系数矩阵,数值在-1到1之间。1表示完全正相关(表达模式一模一样),-1表示完全负相关(表达模式完全相反),0则表示没有线性关系。但是,面对一个满是数字的矩阵表格,我们的大脑很难直观地捕捉到其中的模式和规律。
所以,我们需要可视化。而热图,尤其是三角热图,就是展示这种相关性矩阵的“神器”。它通过颜色的深浅(比如从蓝色到红色)来代表相关系数的大小,一眼看过去,哪些亚群关系“铁”,哪些亚群“合不来”,全都一目了然。相比于展示完整的方形矩阵,只展示上三角或下三角的“三角热图”能有效避免信息冗余,让图形更加简洁、重点突出。
在R语言里,绘制这种相关性热图有几个包可以选择,比如 pheatmap、ComplexHeatmap。但今天我们要重点拆解的,是专门为相关性矩阵可视化而生的 corrplot 包。它轻量、灵活,参数丰富,能轻松实现从基础到高级的各种个性化需求。接下来,我就手把手带你,从虚构数据开始,一步步绘制出能直接放进论文里的高级三角热图。
2. 实战准备:构建单细胞亚群相关性矩阵
理论说再多,不如动手做一遍。为了让大家都能复现,我这里不使用真实的单细胞数据(因为数据获取和预处理过程太长),而是按照单细胞分析的经典流程,虚构一个亚群表达矩阵来计算相关性。这个方法在探索性分析和教程演示中非常实用。
首先,我们假设已经有一个名为 uterus 的 Seurat 对象,并且已经完成了基础分析和细胞聚类。我们使用聚类结果(seurat_clusters)来模拟“亚群”。
# 1. 设置工作目录并加载必要的R包
setwd('你的工作路径') # 请替换为你的实际路径
library(Seurat)
library(dplyr)
library(ggplot2)
library(corrplot)
library(RColorBrewer)
# 2. 虚构亚群标签:将聚类ID转换为亚群名称
# 假设我们有10个聚类,将它们命名为 Cells_0 到 Cells_9
uterus$subtype <- paste0("Cells_", uterus$seurat_clusters)
Idents(uterus) <- "subtype" # 将亚群设置为当前细胞身份
# 3. 寻找每个亚群的标志基因(marker genes)
# 这里使用 FindAllMarkers,只保留显著高表达的基因
Markers <- FindAllMarkers(uterus,
only.pos = TRUE, # 只找正相关的标志基因
min.pct = 0.2, # 基因至少在20%的细胞中表达
logfc.threshold = 0.25, # 对数倍变化阈值
verbose = TRUE,
max.cells.per.ident = 2000) # 控制计算量
# 4. 数据清洗:移除核糖体基因(通常作为噪音过滤),并筛选调整后p值显著的基因
Markers <- subset(Markers[grep("^RP[L|S]", Markers$gene, ignore.case = FALSE, invert=TRUE), ],
subset = p_val_adj < 0.05)
# 5. 计算每个亚群中标志基因的平均表达量
# 这是将单细胞数据“压缩”成亚群水平表达谱的关键一步
Markers_av <- AverageExpression(uterus,
group.by = "subtype",
features = unique(Markers$gene),
assays = "RNA")
Markers_av <- Markers_av$RNA # 提取RNA assay的结果
# 6. 对基因表达量进行标准化(Z-score标准化)
# 这一步是为了消除基因本身表达量高低的影响,让相关性计算更关注表


1022

被折叠的 条评论
为什么被折叠?



