本系列讲解 使用 Scanpy
分析单细胞(scRNA-seq)数据 教程[1],持续更新,欢迎关注,转发!
一个坐标轴(axis)可以传递给绘图函数,从而把多个输出合并到同一个图中,如下例所示。
import matplotlib.pyplot as plt
fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(20, 4), gridspec_kw={"wspace": 0.9})
ax1_dict = sc.pl.dotplot(
pbmc, marker_genes_dict, groupby="bulk_labels", ax=ax1, show=False
)
ax2_dict = sc.pl.stacked_violin(
pbmc, marker_genes_dict, groupby="bulk_labels", ax=ax2, show=False
)
ax3_dict = sc.pl.matrixplot(
pbmc, marker_genes_dict, groupby="bulk_labels", ax=ax3, show=False, cmap="viridis"
)
Heatmaps 不会像前面的图那样把细胞合并。相反,每个细胞分别显示为一行(如果 swap_axes=True,则为一列)。可以添加 groupby 信息,并使用与 sc.pl.umap 或其他嵌入图相同的色码来表示。
ax = sc.pl.heatmap(
pbmc, marker_genes_dict, groupby="clusters", cmap="viridis", dendrogram=True
)
Heatmap 也可以在经过缩放的数据上绘制。在下一幅图中,与之前的 matrixplot 类似,最小值和最大值被调整,并使用了发散型色图。
ax = sc.pl.heatmap(
pbmc,
marker_genes_dict,
groupby="clusters",
layer="scaled",
vmin=-2,
vmax=2,
cmap="RdBu_r",
dendrogram=True,
swap_axes=True,
figsize=(11, 4),
)
Track plot 显示的信息与 heatmap 相同,不同的是用高度而不是色阶来表示基因表达量。
ax = sc.pl.tracksplot(pbmc, marker_genes_dict, groupby="clusters", dendrogram=True)
与之前用已知基因标记来刻画细胞簇不同,我们可以找出在细胞簇或组别中差异表达的基因。
为了识别差异表达基因,我们运行 sc.tl.rank_genes_groups。该函数会依次取每一组细胞,将该组内每个基因的分布与该组外所有细胞的分布进行比较。这里,我们将使用 10x 提供的原始细胞标签,为这些细胞类型找出标记基因。
sc.tl.rank_genes_groups(pbmc, groupby="clusters", method="wilcoxon")
dotplot 可视化有助于快速浏览差异表达基因。为了让结果更紧凑,我们设置 n_genes=4,仅展示得分最高的 4 个基因。
sc.pl.rank_genes_groups_dotplot(pbmc, n_genes=4)
为了获得更好的展示效果,我们可以绘制 log fold changes 而非基因表达量。同时,我们希望只关注在某一细胞类型与其余细胞之间 log fold change ≥ 3 的基因。
此时,我们将参数 values_to_plot 设为 'logfoldchanges',并将 min_logfoldchange 设为 3。
由于 log fold change 是一个发散型尺度,我们同样调整了待绘制的最小值与最大值,并使用发散型色图。请注意,在随后的图中,要区分不同的 T-cell 群体相当困难。
sc.pl.rank_genes_groups_dotplot(
pbmc,
n_genes=4,
values_to_plot="logfoldchanges",
min_logfoldchange=3,
vmax=7,
vmin=-7,
cmap="bwr",
)
接下来,我们使用 dotplot 仅聚焦在两个组别上(violin、heatmap 和 matrixplot 同样支持 groups 选项)。在此,我们将 n_genes 设为 30,因为此时它会展示所有满足 min_logfoldchange=4 的基因,最多到 30 个。
sc.pl.rank_genes_groups_dotplot(
pbmc,
n_genes=30,
values_to_plot="logfoldchanges",
min_logfoldchange=4,
vmax=7,
vmin=-7,
cmap="bwr",
groups=["3", "7"],
)
在随后的图中,我们使用先前计算好的 ‘scaled’ 值(存储在 layer scaled 中)并采用一条发散型色图。
sc.pl.rank_genes_groups_matrixplot(
pbmc, n_genes=3, use_raw=False, vmin=-3, vmax=3, cmap="bwr", layer="scaled"
)
sc.pl.rank_genes_groups_stacked_violin(pbmc, n_genes=3, cmap="viridis_r")
sc.pl.rank_genes_groups_heatmap(
pbmc,
n_genes=3,
use_raw=False,
swap_axes=True,
vmin=-3,
vmax=3,
cmap="bwr",
layer="scaled",
figsize=(10, 7),
show=False,
);
每类展示 10 个基因,关闭基因标签,并交换坐标轴。请注意,当图像交换后,类别会以颜色代码显示,而不再使用 ‘brackets’。
sc.pl.rank_genes_groups_heatmap(
pbmc,
n_genes=10,
use_raw=False,
swap_axes=True,
show_gene_labels=False,
vmin=-3,
vmax=3,
cmap="bwr",
)
sc.pl.rank_genes_groups_tracksplot(pbmc, n_genes=3)
在 scanpy 里,只需一行命令,就能用“对半开”的小提琴图一次性把所有组的标记基因并排比较。
with rc_context({"figure.figsize": (9, 1.5)}):
sc.pl.rank_genes_groups_violin(pbmc, n_genes=20, jitter=False)
大多数可视化都能通过 dendrogram 来排列类别。然而,dendrogram 也可以单独绘制,如下所示:
# compute hierarchical clustering using PCs (several distance metrics and linkage methods are available).
sc.tl.dendrogram(pbmc, "bulk_labels")
ax = sc.pl.dendrogram(pbmc, "bulk_labels")
与 dendrogram 一起,还可以绘制类别间的相关性(默认使用 ‘pearson’ 相关系数)。
ax = sc.pl.correlation_matrix(pbmc, "bulk_labels", figsize=(5, 3.5))
Reference
[1]
Source: https://scanpy.readthedocs.io/en/stable/tutorials/basics/clustering-2017.html