美文网首页scanpy单细胞测序单细胞测序技术
scanpy官方教程2022||03-scanpy包核心绘图功能

scanpy官方教程2022||03-scanpy包核心绘图功能

作者: 信你个鬼 | 来源:发表于2022-07-24 22:58 被阅读0次

    本教程将探索 Scanpy 的可视化可能性,并将其分为三个部分:

    • Scatter plots for embeddings (eg. UMAP, t-SNE)
    • Identification of clusters using known marker genes
    • Visualization of differentially expressed genes

    在本教程中,我们将使用来自10x 的数据集,其中包含来自 PBMC 的68k 个细胞。

    scanpy包中封装了这个数据集的少部分数据:700 cells and 765 highly variable genes,经过了预处理以及UMAP降维。

    本教程使用的marker如下:

    • B-cell: CD79A, MS4A1
    • Plasma: IGJ (JCHAIN)
    • T-cell: CD3D
    • NK: GNLY, NKG7
    • Myeloid: CST3, LYZ
    • Monocytes: FCGR3A
    • Dendritic: FCER1A

    01 tSNE, UMAP散点图绘制

    可以使用sc.pl.tsne, sc.pl.umap等函数绘制散点图。这些函数访问存储在 adata.obms 中的数据。

    • sc.pl.umap使用adata.obsm['X_umap']
    import scanpy as sc
    import pandas as pd
    from matplotlib.pyplot import rc_context
    import matplotlib.pyplot as pl
    sc.set_figure_params(dpi=1000, color_map = 'viridis_r')
    sc.settings.verbosity = 1
    sc.logging.print_header()
    
    ## 加载数据
    pbmc = sc.datasets.pbmc68k_reduced()
    # inspect pbmc contents
    pbmc
    

    数据情况如下:

    AnnData object with n_obs × n_vars = 700 × 765
        obs: 'bulk_labels', 'n_genes', 'percent_mito', 'n_counts', 'S_score', 'G2M_score', 'phase', 'louvain'
        var: 'n_counts', 'means', 'dispersions', 'dispersions_norm', 'highly_variable'
        uns: 'bulk_labels_colors', 'louvain', 'louvain_colors', 'neighbors', 'pca', 'rank_genes_groups'
        obsm: 'X_pca', 'X_umap'
        varm: 'PCs'
        obsp: 'distances', 'connectivities'
    

    基因表达可视化:

    绘制的参数可以是.obs中的任意列名,如基因或者其他参数,.obs是一个数据框,每一行为一个细胞,有点类似Seurat数据结构中的metadata

    outdir = '/Pub/Users/zhangjuan/project/scanpy/Plot/'
    
    # rc_context is used for the figure size, in this case 4x4
    with rc_context({'figure.figsize': (4, 4)}):
        sc.pl.umap(pbmc, color='CD79A')
    pl.savefig(outdir + "./01-UMAP_CD79A.png")
    

    CD79A基因表达:

    1658651376184.png

    可以绘制多个基因或者变量:

    • ncols:控制每列绘制几幅图
    • vmax:控制图中最大值
    with rc_context({'figure.figsize': (3, 3)}):
        sc.pl.umap(pbmc, color=['CD79A', 'MS4A1', 'IGJ', 'CD3D', 'FCER1A', 'FCGR3A', 'n_counts', 'bulk_labels'], s=50, frameon=False, ncols=4, vmax='p99')
    pl.savefig(outdir + "./01-UMAP_Gene.png")
    

    结果:可以看见marker基因在特定群中特异性高表达

    1658661499112.png

    聚类图修改:

    # compute clusters using the leiden method and store the results with the name `clusters`
    sc.tl.leiden(pbmc, key_added='clusters', resolution=0.5)
    with rc_context({'figure.figsize': (5, 5)}):
        sc.pl.umap(pbmc, color='clusters', add_outline=True, legend_loc='on data',
                   legend_fontsize=12, legend_fontoutline=2,frameon=False,
                   title='clustering of cells', palette='Set1')
    pl.savefig(outdir + "./01-UMAP_clusters.png")
    
    

    修改之后如下:比之前的好看一些

    1658661882685.png

    02 基于已知markers的细胞类型鉴定

    通常,细胞cluster需要使用已知的标记基因进行标记。利用散点图,我们可以看到一个基因的表达,也许可以把它与一个cluster联系起来。

    在这里,我们将展示其他可视化的方法,使用点图,小提琴图,热图和我们称之为“轨迹图tracksplot”的东西,将标记基因关联到cluster.

    所有这些可视化总结相同的信息,在不同的cluster中的表达情况,和最佳结果的选择是留给研究者做决定。

    首先,我们建立了一个标记基因字典,因为这将允许 Scanpy 自动标记基因组:

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

    03 dotplotk可视化

    这种类型的图总结了两种类型的信息: 颜色表示每个类别内的平均表达(在这种情况下是每个簇) ,点大小表示表达基因的类别中的细胞比例

    此外,向图中添加一个树状图也很有用,可以将类似的集群聚集在一起。利用聚类之间 PCA 成分的相关性自动计算层次聚类。

    sc.pl.dotplot(pbmc, marker_genes_dict, 'clusters', dendrogram=True)
    pl.savefig(outdir + "./02-Dotplot_markers.png")
    
    1658663842605.png

    使用这个图,我们可以看到第4组对应于 B 细胞,第2组是 T 细胞等。此信息可用于手动注释单元格,如下所示:

    # create a dictionary to map cluster to annotation label
    cluster2annotation = {
         '0': 'Monocytes',
         '1': 'Dendritic',
         '2': 'T-cell',
         '3': 'NK',
         '4': 'B-cell',
         '5': 'Dendritic',
         '6': 'Plasma',
         '7': 'Other',
         '8': 'Dendritic',
    }
    
    # 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)
    pl.savefig(outdir + "./02-Dotplot_markers_anno.png")
    
    

    之前教程01:https://www.jianshu.com/p/3302c664e330 中遇到不支持多个cluster是同一种细胞类型的格式,看来这里又学习到了一种新的注释方法!

    手动注释结果:

    1658664886452.png

    散点图注释后的结果:

    sc.pl.umap(pbmc, color='cell type', legend_loc='on data',
               frameon=False, legend_fontsize=10, legend_fontoutline=2)
    pl.savefig(outdir + "./02-Dotplot_markers_anno_UMAP.png")
    
    1658665511745.png

    04 violin plot

    探索这些标记的另一种方法是用小提琴绘图。这里我们可以看到CD79A在集群5和8中的表达,以及MS4A1在集群5中的表达。与点图相比,小提琴图给我们提供了基因表达值在细胞中的分布。

    with rc_context({'figure.figsize': (4.5, 3)}):
        sc.pl.violin(pbmc, ['CD79A', 'MS4A1'], groupby='clusters' )
    pl.savefig(outdir + "./03-Violin_markers.png")    
    

    小提琴图:

    1658665671815.png

    注意:小提琴绘图还可以用于绘制存储在.obs中的任何数值。例如,这里用小提琴图来比较不同集群之间的基因数量和线粒体基因的百分比

    # use stripplot=False to remove the internal dots, 
    # inner='box' adds a boxplot inside violins
    with rc_context({'figure.figsize': (4.5, 3)}):
        sc.pl.violin(pbmc, ['n_genes', 'percent_mito'], groupby='clusters', stripplot=False, inner='box') 
    pl.savefig(outdir + "./03-Violin_n_genes-percent_mito.png")     
    

    结果如下:

    1658665875499.png

    05 stacked-violin plot

    为了同时查看所有标记基因的小提琴图,我们使用sc.pl.stacked_violin。与前面一样,将一个树形图添加到类似的集群中。

    ax = sc.pl.stacked_violin(pbmc, marker_genes_dict, groupby='clusters', swap_axes=False, dendrogram=True)
    pl.savefig(outdir + "./04-stacked-violin.png")    
    
    

    结果如下:

    1658667102077.png

    06 matrixplot

    将基因表达可视化的一个简单方法是用矩阵图。这是按类别分组的每个基因的平均表达值的热图。这种类型图显示的信息基本上与dotplot中的颜色相同。

    这里,基因的表达量归一化为从0到1,1表示最大的均值表达量,0表示最小的均值表达量

    sc.pl.matrixplot(pbmc, marker_genes_dict, 'clusters', dendrogram=True, cmap='Blues', standard_scale='var', colorbar_title='column scaled\nexpression')
    pl.savefig(outdir + "./05-matrixplot.png")   
    
    

    结果如下:

    1658667318509.png

    其他有用的选择是使用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')
    pl.savefig(outdir + "./05-matrixplot-scaled.png")   
    
    

    结果:

    1658668149626.png

    07 合并图

    使用axis给绘图以组合多个输出,如下面的示例所示:

    import matplotlib.pyplot as pl
    fig, (ax1, ax2, ax3) = pl.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')
    pl.savefig(outdir + "./05-plot_combined.png") 
    
    

    结果如下:


    1658668481037.png

    08 Heatmaps图

    热图不像以前的图那样归类细胞。相反,每个细胞显示在一行中(如果swap_axes=True则显示在列中)。可以添加groupby信息,并使用与sc.pl.umap或任何其他嵌入相同的颜色代码显示。

    ax = sc.pl.heatmap(pbmc, marker_genes_dict, groupby='clusters', cmap='viridis', dendrogram=True)
    pl.savefig(outdir + "./06-Heatmaps.png") 
    
    

    结果图:

    1658669218652.png

    热图也可以使用scaled数据绘制。在下一幅图中,类似于之前的矩阵图,最小值和最大值已经被调整,并使用了一个不同的颜色映射

    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))
    pl.savefig(outdir + "./06-Heatmaps_scaled.png") 
    
    

    结果图:

    1658669350406.png

    09 Tracksplot

    轨迹图显示了与热图相同的信息,但是,基因表达用高度代替了颜色值

    ax = sc.pl.tracksplot(pbmc, marker_genes_dict, groupby='clusters', dendrogram=True)
    pl.savefig(outdir + "./07-tracksplot.png") 
    
    

    结果图:


    1658669504569.png

    10 差异表达基因可视化

    我们不像以前那样通过已知的基因标记来确定集群的特征,而是可以识别在集群或组中有差异表达的基因。

    为了识别差异表达的基因,我们运行sc.tl.rank_genes_groups。这个功能将取每组细胞,并将每一个基因在组内的分布与不在组内的所有其他细胞的分布进行比较。在这里,我们将使用10倍给出的原始细胞标记来识别这些细胞类型的标记基因。

    在每个cluster中都展示差异表达基因:

    sc.tl.rank_genes_groups(pbmc, groupby='clusters', method='wilcoxon')
    sc.pl.rank_genes_groups_dotplot(pbmc, n_genes=4)
    pl.savefig(outdir + "./08-rank_genes_groups_dotplot.png") 
    
    

    气泡图可视化差异表达基因:每个cluster FC前4个差异基因

    1658670096775.png

    为了得到一个更好的表示,我们可以绘制对数log FC而不是基因表达。同时,我们想要关注在细胞类型表达和其他细胞之间具有log fold变化>= 3的基因。

    设置:values_to_plot='logfoldchanges' and min_logfoldchange=3

    sc.pl.rank_genes_groups_dotplot(pbmc, n_genes=4, values_to_plot='logfoldchanges', min_logfoldchange=3, vmax=7, vmin=-7, cmap='bwr')
    pl.savefig(outdir + "./08-rank_genes_groups_dotplot_FC.png") 
    
    

    FC值可视化top4:

    1658670326417.png

    只画某些类比如cluster1与clsuter5:

    sc.pl.rank_genes_groups_dotplot(pbmc, n_genes=30, values_to_plot='logfoldchanges', min_logfoldchange=4, vmax=7, vmin=-7, cmap='bwr', groups=['1', '5'])
    pl.savefig(outdir + "./08-rank_genes_groups_dotplot_FC1.png") 
    
    

    结果:

    1658670564516.png

    使用matrixplot可视化差异表达基因:

    sc.pl.rank_genes_groups_matrixplot(pbmc, n_genes=3, use_raw=False, vmin=-3, vmax=3, cmap='bwr', layer='scaled')
    pl.savefig(outdir + "./08-rank_genes_groups_matrixplot.png") 
    
    

    结果图:

    1658670742350.png

    使用stacked violin plots可视化差异表达基因:

    sc.pl.rank_genes_groups_stacked_violin(pbmc, n_genes=3, cmap='viridis_r')
    pl.savefig(outdir + "./08-rank_genes_groups_stacked_violin.png") 
    
    

    结果图:

    1658670833808.png

    heatmap可视化差异表达基因:

    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);
    pl.savefig(outdir + "./08-rank_genes_groups_heatmap.png") 
    
    

    结果图:


    1658671130018.png

    每个类别显示10个基因,关闭基因标签并交换轴。请注意,当图像交换时,类别的颜色代码将出现,而不是“括号”。

    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')
    pl.savefig(outdir + "./08-rank_genes_groups_heatmap10.png") 
    
    

    结果图:

    1658671196220.png

    tracksplot可视化差异表达基因:

    sc.pl.rank_genes_groups_tracksplot(pbmc, n_genes=3)
    pl.savefig(outdir + "./08-rank_genes_groups_tracksplot.png") 
    
    

    结果图:

    1658671304645.png

    split violin plots可视化差异表达基因:

    with rc_context({'figure.figsize': (9, 1.5)}):
        sc.pl.rank_genes_groups_violin(pbmc, n_genes=20, jitter=False)
    

    结果图:其中一个cluster

    image.png

    11 不同cluster之间的聚类树

    大多数可视化可以使用树状图来排列类别。然而,树状图也可以单独绘制如下:

    # 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')
    pl.savefig(outdir + "./09-dendrogram.png") 
    
    

    结果图:

    1658672048977.png

    12 绘制相关性

    与树状图一起,可以绘制出类别的相关性(默认为pearson)

    ax = sc.pl.correlation_matrix(pbmc, 'bulk_labels', figsize=(5,3.5))
    pl.savefig(outdir + "./10-correlation_matrix.png") 
    
    

    结果图:

    image.png

    相关文章

      网友评论

        本文标题:scanpy官方教程2022||03-scanpy包核心绘图功能

        本文链接:https://www.haomeiwen.com/subject/cuiwirtx.html