单细胞分析: Scanpy 核心绘图 (2)

简介: 单细胞分析: Scanpy 核心绘图 (2)

引言

本系列讲解 使用 Scanpy 分析单细胞(scRNA-seq)数据 教程,持续更新,欢迎关注,转发!

基于已知标记基因识别细胞簇

通常,细胞簇需要利用众所周知的标记基因来进行标注。使用散点图,我们可以查看某个基因的表达情况,并可能将其与某个细胞簇关联起来。在此,我们将展示其他可视化的方式,用点图、小提琴图、热图以及我们称之为 ‘tracksplot’ 的图形,将标记基因与细胞簇关联起来。所有这些可视化方法汇总了相同的信息——按细胞簇拆分的表达量——而挑选最佳结果则留给研究者自行决定。

首先,我们建立一个包含标记基因的字典,因为这将允许 scanpy 自动对这些基因组进行分组标记:

marker_genes_dict = {
   
    "B-cell": ["CD79A", "MS4A1"],
    "Dendritic": ["FCER1A", "CST3"],
    "Monocytes": ["FCGR3A"],
    "NK": ["GNLY", "NKG7"],
    "Other": ["IGLL1"],
    "Plasma": ["IGJ"],
    "T-cell": ["CD3D"],
}

dotplot

一种快速检查这些基因在每个细胞簇中表达情况的方法是使用 dotplot。这种图总结了两类信息:颜色表示每个类别(在此为每个细胞簇)内的平均表达量,而点的大小则指示该类别中表达该基因的细胞比例。

此外,在图中添加 dendrogram 也很有帮助,它能把相似的细胞簇聚集在一起。层级聚类是利用各细胞簇之间 PCA components 的相关性自动计算的。

sc.pl.dotplot(pbmc, marker_genes_dict, "clusters", dendrogram=True)

使用这张图,我们可以看到 cluster 4 对应于 B-cells,cluster 2 是 T-cells 等等。这些信息可以用来按如下方式手动注释细胞:

# create a dictionary to map cluster to annotation label
cluster2annotation = {
   
    "0": "Monocytes",
    "1": "NK",
    "2": "T-cell",
    "3": "Dendritic",
    "4": "Dendritic",
    "5": "Plasma",
    "6": "B-cell",
    "7": "Dendritic",
    "8": "Other",
}

# add a new `.obs` column called `cell type` by mapping clusters to annotation using pandas `map` function
pbmc.obs["cell type"] = pbmc.obs["clusters"].map(cluster2annotation).astype("category")

sc.pl.dotplot(pbmc, marker_genes_dict, "cell type", dendrogram=True)

sc.pl.umap(
    pbmc,
    color="cell type",
    legend_loc="on data",
    frameon=False,
    legend_fontsize=10,
    legend_fontoutline=2,
)

violin plot

另一种探索标记基因的方法是使用 violin plot。在这里,我们可以看到 CD79A 在 clusters 5 和 8 中的表达,以及 MS4A1 在 cluster 5 中的表达。与 dotplot 相比,violin plot 让我们了解基因表达值在细胞间的分布情况。

with rc_context({
   "figure.figsize": (4.5, 3)}):
    sc.pl.violin(pbmc, ["CD79A", "MS4A1"], groupby="clusters")

注意:Violin plots 也可用于绘制任何保存在 .obs 中的数值型数据。例如,这里用 violin plots 比较不同 clusters 之间的基因数量以及线粒体基因所占百分比。

with rc_context({
   "figure.figsize": (4.5, 3)}):
    sc.pl.violin(
        pbmc,
        ["n_genes", "percent_mito"],
        groupby="clusters",
        stripplot=False,  # remove the internal dots
        inner="box",  # adds a boxplot inside violins
    )

stacked-violin plot

为了同时查看所有标记基因的 violin plots,我们使用 sc.pl.stacked_violin。与前文相同,添加了一条 dendrogram 用以将相似的 clusters 归为一组。

ax = sc.pl.stacked_violin(
    pbmc, marker_genes_dict, groupby="clusters", swap_axes=False, dendrogram=True
)

matrixplot

可视化基因表达的一种简单方法是使用 matrix plot。这是一种以类别为单位,展示每个基因平均表达量的 heatmap。这种类型的图基本上与 dotplot 中的颜色所传达的信息相同。

在此,我们将基因的表达量缩放到 0 到 1 之间,其中 1 表示该基因在所有 clusters 中的最大平均表达量,0 表示最小平均表达量。

sc.pl.matrixplot(
    pbmc,
    marker_genes_dict,
    "clusters",
    dendrogram=True,
    cmap="Blues",
    standard_scale="var",
    colorbar_title="column scaled\nexpression",
)

另一个有用的选项是使用 sc.pp.scale 对基因表达进行标准化。在此,我们将这一结果存储在 scale 层中。随后我们调整图的最小值和最大值,并采用一条发散型色带(本例为 RdBu_r,其中 _r 表示反转)。

# scale and store results in layer
pbmc.layers["scaled"] = sc.pp.scale(pbmc, copy=True).X

sc.pl.matrixplot(
    pbmc,
    marker_genes_dict,
    "clusters",
    dendrogram=True,
    colorbar_title="mean z-score",
    layer="scaled",
    vmin=-2,
    vmax=2,
    cmap="RdBu_r",
)

相关文章
|
IDE Linux 开发工具
如何在Linux运行RStudio Server并实现Web浏览器远程访问
如何在Linux运行RStudio Server并实现Web浏览器远程访问
594 0
|
5月前
|
存储 数据可视化 数据挖掘
单细胞分析: Scanpy 核心绘图 (1)
单细胞分析: Scanpy 核心绘图 (1)
|
7月前
|
数据可视化 数据挖掘
Scanpy 分析 scRNA-seq:降维与聚类
Scanpy 分析 scRNA-seq:降维与聚类
Scanpy 分析 scRNA-seq:降维与聚类
|
2月前
|
数据可视化 数据挖掘
空间转录组: DLPFC数据集分析 (3)
空间转录组: DLPFC数据集分析 (3)
179 83
空间转录组: DLPFC数据集分析 (3)
|
4月前
|
算法 数据可视化 数据挖掘
空间转录组: 降维聚类+差异分析
空间转录组: 降维聚类+差异分析
空间转录组: 降维聚类+差异分析
|
6月前
|
机器学习/深度学习 数据可视化 Python
Scanpy 分析 3k PBMCs:寻找 marker 基因
Scanpy 分析 3k PBMCs:寻找 marker 基因
Scanpy 分析 3k PBMCs:寻找 marker 基因
|
4月前
|
存储 数据可视化
单细胞分析: Scanpy 核心绘图 (3)
单细胞分析: Scanpy 核心绘图 (3)
单细胞分析: Scanpy 核心绘图 (3)
|
9月前
|
数据处理
CUT&Tag 数据处理和分析教程(2)
CUT&Tag 数据处理和分析教程(2)
CUT&Tag 数据处理和分析教程(2)
|
10月前
|
数据采集 数据挖掘
RNA-seq 差异分析的细节详解 (7)
RNA-seq 差异分析的细节详解 (7)
RNA-seq 差异分析的细节详解 (7)
|
9月前
|
数据挖掘
R中单细胞RNA-seq分析教程 (11)
R中单细胞RNA-seq分析教程 (11)
R中单细胞RNA-seq分析教程 (11)