本教程将探索 Scanpy 的可视化可能性,并将其分为三个部分:
在本教程中,我们将使用来自10x 的数据集,其中包含来自 PBMC 的68k 个细胞。
scanpy包中封装了这个数据集的少部分数据:700 cells and 765 highly variable genes,经过了预处理以及UMAP降维。
本教程使用的marker如下:
可以使用sc.pl.tsne, sc.pl.umap等函数绘制散点图。这些函数访问存储在 adata.obms 中的数据。
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基因表达:

可以绘制多个基因或者变量:
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基因在特定群中特异性高表达

聚类图修改:
# 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")
修改之后如下:比之前的好看一些

通常,细胞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'],
}
这种类型的图总结了两种类型的信息: 颜色表示每个类别内的平均表达(在这种情况下是每个簇) ,点大小表示表达基因的类别中的细胞比例
此外,向图中添加一个树状图也很有用,可以将类似的集群聚集在一起。利用聚类之间 PCA 成分的相关性自动计算层次聚类。
sc.pl.dotplot(pbmc, marker_genes_dict, 'clusters', dendrogram=True)
pl.savefig(outdir + "./02-Dotplot_markers.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是同一种细胞类型的格式,看来这里又学习到了一种新的注释方法!
手动注释结果:

散点图注释后的结果:
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")

探索这些标记的另一种方法是用小提琴绘图。这里我们可以看到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")
小提琴图:

注意:小提琴绘图还可以用于绘制存储在.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")
结果如下:

为了同时查看所有标记基因的小提琴图,我们使用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")
结果如下:

将基因表达可视化的一个简单方法是用矩阵图。这是按类别分组的每个基因的平均表达值的热图。这种类型图显示的信息基本上与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")
结果如下:

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

使用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")
结果如下:

热图不像以前的图那样归类细胞。相反,每个细胞显示在一行中(如果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")
结果图:

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

轨迹图显示了与热图相同的信息,但是,基因表达用高度代替了颜色值
ax = sc.pl.tracksplot(pbmc, marker_genes_dict, groupby='clusters', dendrogram=True)
pl.savefig(outdir + "./07-tracksplot.png")
结果图:

我们不像以前那样通过已知的基因标记来确定集群的特征,而是可以识别在集群或组中有差异表达的基因。
为了识别差异表达的基因,我们运行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")

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

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

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")
结果图:

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

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")
结果图:

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

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

with rc_context({'figure.figsize': (9, 1.5)}):
sc.pl.rank_genes_groups_violin(pbmc, n_genes=20, jitter=False)
结果图:其中一个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")
结果图:

与树状图一起,可以绘制出类别的相关性(默认为pearson)
ax = sc.pl.correlation_matrix(pbmc, 'bulk_labels', figsize=(5,3.5))
pl.savefig(outdir + "./10-correlation_matrix.png")
结果图:

只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
在Rails自动生成的功能测试(test/functional/products_controller_test.rb)中,我看到以下代码:classProductsControllerTest我的问题是:方法调用products()在哪里/如何定义?products(:one)到底是什么意思?看代码,大概意思是“创建一个产品”,但是它是如何工作的呢?注意我是Ruby/Rails的新手,如果这些是微不足道的问题,我深表歉意。 最佳答案 如果您查看test/fixtures文件夹,您会看到一个products.yml文件。这是在您创建
我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa
在我的一些Controller中,我有一个before_filter检查用户是否登录?用于CRUD操作。application.rbdeflogged_in?unlesscurrent_userredirect_toroot_pathendendprivatedefcurrent_user_sessionreturn@current_user_sessionifdefined?(@current_user_session)@current_user_session=UserSession.findenddefcurrent_userreturn@current_userifdefine
3月26日,映宇宙(HK:03700,即“映客”)发布截至2022年12月31日的2022年度业绩财务报告。财报显示,映宇宙2022年的总营收为63.19亿元,较2021年同期的91.76亿元下降31.1%。2022年,映宇宙的经营亏损为4698.7万元,2021年同期则为净利润4.57亿元;期内亏损(净亏损)为1.68亿元,2021年同期的净利润为4.33亿元;非国际财务报告准则经调整净利润为3.88亿元,2021年同期为4.82亿元,同比下降19.6%。 映宇宙在财报中表示,收入减少主要是由于行业竞争加剧,该集团对旗下产品采取更为谨慎的运营策略以应对市场变化。不过,映宇宙的毛利率则有所提升
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定