• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    同等学历教学

    同等学历教学

    免费
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      同等学历教学

      同等学历教学

      免费
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      未分类

      • 首页
      • 博客
      • 未分类
      • scanpy官方教程2022|03-scanpy包核心绘图功能

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

      • 发布者 jiangxingyu
      • 分类 未分类
      • 日期 2022年8月19日
      测试开头

      分享是一种态度

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

      学习资料来源:

      • scanpy主页:https://scanpy.readthedocs.io/en/stable/
      • 官网:https://scanpy-tutorials.readthedocs.io/en/latest/plotting/core.html【注意教程有两个版本,这里是latest版本的学习笔记】

      本教程将探索 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/zj/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基因表达:

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

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

      • 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基因在特定群中特异性高表达

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

      聚类图修改:

      # 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")

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

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

      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")
      scanpy官方教程2022|03-scanpy包核心绘图功能

      使用这个图,我们可以看到第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是同一种细胞类型的格式,看来这里又学习到了一种新的注释方法!

      手动注释结果:

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

      散点图注释后的结果:

      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")
      scanpy官方教程2022|03-scanpy包核心绘图功能

      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")    

      小提琴图:

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

      注意:小提琴绘图还可以用于绘制存储在.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](scanpy官方教程2022-03-Core plotting functions.assets/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")    

      结果如下:

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

      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 scalednexpression')
      pl.savefig(outdir + "./05-matrixplot.png")   

      结果如下:

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

      其他有用的选择是使用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")   

      结果:

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

      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") 

      结果如下:

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

      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") 

      结果图:

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

      热图也可以使用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") 

      结果图:

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

      09 Tracksplot

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

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

      结果图:

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

      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个差异基因

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

      为了得到一个更好的表示,我们可以绘制对数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:

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

      只画某些类比如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") 

      结果:

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

      使用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") 

      结果图:

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

      使用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") 

      结果图:

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

      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") 

      结果图:

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

      每个类别显示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") 

      结果图:

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

      tracksplot可视化差异表达基因:

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

      结果图:

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

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

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

      结果图:其中一个cluster

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

      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") 

      结果图:

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

      12 绘制相关性

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

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

      结果图:

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

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

      技能树六周年福利来袭

      单细胞分析如何确定合适的resolution

      单细胞RNA测序揭示胶质母细胞瘤进展过程中的免疫景观演变

      单细胞转录组揭示肝内胆管癌的两种分子亚型

      单细胞水平的基因共表达网络网络分析之scGENA




      如果你对单细胞转录组研究感兴趣,但又不知道如何入门,也许你可以关注一下下面的课程

      • 提前锁定年后马拉松授课名额,赠送价值1600的单细胞数据分析一次

      • 一个10x单细胞样品费用拿下你的专属64线程200G内存服务器

      • 96线程384G内存服务器共享一年仅700(每月一批,循环开通账号)

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

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

      看完记得顺手点个“在看”哦!

      scanpy官方教程2022|03-scanpy包核心绘图功能生物 | 单细胞 | 转录组丨资料

      每天都精彩

      长按扫码可关注

      测试结尾

      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      jiangxingyu

      上一篇文章

      介绍一个新的基线特征表绘制R包
      2022年8月19日

      下一篇文章

      R语言学习:重读《R数据科学(中文版)》书籍
      2022年9月28日

      你可能也喜欢

      2-1675088548
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      30 1月, 2023
      9-1675131201
      如何快速批量修改 Git 提交记录中的用户信息
      26 1月, 2023
      8-1678501786
      肿瘤细胞通过改变CD8+ T细胞中的丙酮酸利用和琥珀酸信号来调控抗肿瘤免疫应答。
      7 12月, 2022

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?