Scanpy单细胞绘图功能实战全解:从核心函数到高级可视化

张开发
2026/4/16 19:35:58 15 分钟阅读

分享文章

Scanpy单细胞绘图功能实战全解:从核心函数到高级可视化
1. Scanpy单细胞绘图功能入门指南单细胞RNA测序技术正在彻底改变我们对细胞异质性的理解而Scanpy作为Python生态中最强大的单细胞分析工具之一其可视化功能尤其出色。我第一次接触Scanpy时就被它简洁而强大的绘图API所震撼 - 只需几行代码就能生成专业级的单细胞可视化图表。让我们从最基础的散点图开始。Scanpy内置的PBMC68k数据集是个绝佳的起点这个数据集已经预处理完毕包含约700个外周血单个核细胞的表达谱。导入数据只需一行代码import scanpy as sc pbmc sc.datasets.pbmc68k_reduced()这个数据集的神奇之处在于它已经包含了UMAP降维结果和多种细胞类型注释。我们可以立即用sc.pl.umap()函数绘制第一张图with sc.plotting_context(figsize(4,4)): sc.pl.umap(pbmc, color[CD3D, CD79A], frameonTrue)这里有几个实用技巧plotting_context可以统一设置图形大小和风格color参数可以同时传入多个基因名frameon控制是否显示边框。我第一次使用时犯了个错误 - 忘记导入matplotlib的rc_context结果图形尺寸怎么调都不对后来发现Scanpy有自己的绘图上下文管理器。2. 核心绘图函数深度解析2.1 散点图的进阶玩法散点图远不止展示基因表达这么简单。我们可以用不同颜色编码细胞的各种属性# 显示细胞聚类结果 sc.tl.leiden(pbmc, resolution0.5) sc.pl.umap(pbmc, colorleiden, legend_locon data, paletteSet2) # 显示细胞周期阶段 sc.tl.score_genes_cell_cycle(pbmc) sc.pl.umap(pbmc, colorphase)参数调优是门艺术。legend_loc控制图例位置我习惯用on data直接将标签显示在细胞群上palette改变配色方案推荐试试viridis、Set2等经典方案。有个坑要注意当细胞数量很多时点的大小(size)需要调小否则图形会变成一片模糊。2.2 点图揭示细胞身份点图(dotplot)是鉴定细胞类型的利器。它用点的大小表示表达频率颜色表示平均表达量marker_genes { T细胞: [CD3D, CD8A], B细胞: [CD79A, MS4A1], NK细胞: [NKG7, GNLY] } sc.pl.dotplot(pbmc, marker_genes, leiden, dendrogramTrue)这里有个实用技巧添加dendrogramTrue会自动对细胞聚类使相似细胞类型相邻排列。我第一次分析时忽略了这点结果图表杂乱无章后来加上聚类后立即清晰多了。3. 高级可视化技巧3.1 小提琴图的变异应用小提琴图不仅能展示基因表达分布还能可视化任何数值型元数据# 常规基因表达小提琴图 sc.pl.violin(pbmc, [CD79A, MS4A1], groupbyleiden) # 展示细胞元数据 sc.pl.violin(pbmc, n_genes, groupbyleiden)堆叠小提琴图(stacked violin)更加强大可以一次性比较多个基因sc.pl.stacked_violin(pbmc, marker_genes, groupbyleiden, swap_axesTrue)swap_axes参数是个实用技巧 - 当基因数量多时设为True可以横向排列图表避免图形过于拥挤。3.2 热图与矩阵图的精妙差异热图(heatmap)和矩阵图(matrixplot)看似相似实则各有侧重# 经典热图 sc.pl.heatmap(pbmc, marker_genes, leiden, cmapReds) # 矩阵图(可标准化表达) sc.pl.matrixplot(pbmc, marker_genes, leiden, standard_scalevar, cmapBlues)矩阵图的优势在于standard_scale参数可以对每行或每列进行标准化突出相对表达模式。我经常用standard_scalevar按基因标准化这样不同基因间的表达量可以比较。4. 实战中的疑难解答4.1 UMAP与聚类算法的关系很多初学者困惑于UMAP与Leiden/Louvain聚类的关系。简单来说UMAP是降维算法将高维数据映射到2D/3D空间Leiden/Louvain是聚类算法基于细胞间的相似性划分群体# 先降维 sc.tl.umap(pbmc) # 后聚类 sc.tl.leiden(pbmc) # 可视化聚类结果 sc.pl.umap(pbmc, colorleiden)关键点UMAP只决定细胞在图中的位置而聚类算法决定哪些细胞属于同一群体。调整聚类分辨率(resolution)可以控制群体数量 - 值越大群体越多。4.2 标记基因的可视化策略识别细胞类型依赖标记基因Scanpy提供了多种可视化方法# 1. 差异基因点图 sc.tl.rank_genes_groups(pbmc, leiden, methodwilcoxon) sc.pl.rank_genes_groups_dotplot(pbmc, n_genes3) # 2. 矩阵图展示 sc.pl.rank_genes_groups_matrixplot(pbmc, n_genes3, cmapbwr) # 3. 热图展示 sc.pl.rank_genes_groups_heatmap(pbmc, n_genes3, show_gene_labelsTrue)我特别喜欢rank_genes_groups_dotplot它能同时展示表达量和log2FC。有个经验当使用Wilcoxon检验时设置n_genesadata.shape[1]可以保存所有基因的评分避免后续报错。4.3 多图合并技巧使用matplotlib的subplots可以组合多个Scanpy图表import matplotlib.pyplot as plt fig, (ax1, ax2) plt.subplots(1, 2, figsize(12,5)) sc.pl.umap(pbmc, colorleiden, axax1, showFalse) sc.pl.dotplot(pbmc, marker_genes, leiden, axax2, showFalse) plt.tight_layout()注意showFalse参数必不可少否则每个图会单独显示。tight_layout()可以自动调整子图间距避免标签重叠。

更多文章