在上一期
详解单细胞分析基础流程(一)标准分析
中和大家分享了使用Seurat进行单细胞分析的基础流程,本来这篇文章想直奔基础流程中的难点细胞注释的。但是考虑到在Seurat的数据可视化方面还大有可为,其数据的可视化方法远远不止上一篇文章当中提到的几种,因此这篇文章呢我们接着来学习Seurat数据的可视化。不要求全部掌握,但是尽可能多了解一些可视化的方法,以后出图的时候能更加游刃有余。
而且在我个人看来,多花一些时间去学习数据结构和数据可视化是非常值得的。数据分析这项工作和细胞动物实验一样,都是需要花一些时间去打磨的。基础不牢,地动山摇。
本文使用的是10X Genomics公司提供的外周血单个核细胞(PBMC)数据集。通过使用 Illumina NextSeq 500测序得到了2700个细胞的单细胞转录组数据。
测试数据可以从Seurat官网
https://satijalab.org/seurat/
获得。
(Seurat官网:
https://satijalab.org/seurat/
)
00 加载分析所需要的包
01 读取Seurat数据
设置工作目录
读取数据
在这里加载的数据集,其实就是我们上一次分析完成以后保存的结果
可以看到,上一次的分析结果(包括聚类与细胞注释)已经储存在
pbmc3k.final
中了
02 marker基因可视化
在Seurat官网上,Seurat基础分析当中的marker基因可视化方法他们只给了三种,即VlnPlot、FeaturePlot和Heatmap,不过在数据可视化专栏里,又加入了两种方法(RidgePlot和DotPlot)。上一篇文章当中我们也展示了这五种可视化方法,并且他们的作用基本是一致的,具体选用哪种大家就各取所好,没有固定要求。因此这里只做简单回顾,不再深入探讨。
我个人比较喜欢这种可视化方法,点的大小表示每个cluster当中表达这种基因的细胞的比例,点的颜色深浅表示表达量的多少。
03 FeaturePlot进阶
首先来看看最基础的FeaturePlot画图效果
这里是通过修改cutoff参数来调整颜色(表达水平)的对比度,这样可以更清楚地区分表达水平的高低。在没有设置
min.cutoff
和
max.cutoff
的情况下,
FeaturePlot
默认使用整个表达数据范围来映射颜色,这可能会导致表达水平较低的细胞在可视化中不够明显。
这张图颜色深浅表示的是基因表达量的百分位数,
"q10"
表示下10%分位数,而
"q90"
表示上90%分位数。
min.cutoff = "q10"
表示将颜色的下限设置为每个基因表达值的10%分位数。也就是说,低于这个分位数的表达值将被视为最低颜色(通常是白色或类似的颜色)。
max.cutoff = "q90"
表示将颜色的上限设置为每个基因表达值的90%分位数。高于这个分位数的表达值将被视为最高颜色。
在多基因同时可视化时,这种方法尤其有用,因为能够确保不同基因的高表达和低表达都会在各自的图中突出显示。
这张图把两个基因的表达混在同一张图中进行展示,左边两个UMAP图分别独立显示了
MS4A1
和
CD79A
基因的表达情况,第三个UMAP图显示了这两个基因的共表达,在相同的细胞上混合两个基因的颜色。
这种图片对于探索基因间的潜在关联比较有效,比如识别可能具有相似功能或参与相同生物学过程的多个基因。如果一个细胞同时高表达
MS4A1
和
CD79A
,它在图上将显示为黄色(红色和绿色的混合)。如果一个基因表达高而另一个基因表达低,将更倾向于显示其中一个基因的颜色。
这张图效果很直观,可以让我们按照不同处理条件的样本(例如对照组、实验组)展示基因表达量。
例如下面这个数据集,就可以按照不同的处理条件对基因表达进行分组展示:
(
https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE207111
)
04 其他绘图方法的进阶
除了FeaturePlot,其他可视化方法也有各自的更新和拓展。
这张是用小提琴图展示两组细胞的线粒体基因表达情况,假如我们之前没有进行线粒体基因表达的过滤的话,这样的图还能帮我们分析在不同条件或分类下的线粒体DNA污染或细胞活力状态。
每个点的大小表示该基因在对应细胞类型中的百分比表达水平,颜色深浅表示平均表达水平的高低。小提琴图侧重于展示单个变量的分布情况,而点图则用于同时展示多个变量的表达水平和表达比例。
然后是细胞聚类的可视化,也能通过改变参数达到不同的效果
然后我们再来看看单纯的PCA线性降维画出来的图应该是什么样子的
通过将
umap
slot设置为
NULL
,从对象中移除了UMAP降维结果,这样可以让
DimPlot
函数默认退到下一个可用的降维结果,通常就是PCA了。
在单细胞转录组测序分析中,PCA通常用作初步的数据探索,以查看样本中的主要变异趋势以及可能的细胞群。
在完成细胞聚类和注释以后,可以通过热图查看每个细胞群(cluster)的高可变基因,我们选择前100个基因、前500个细胞进行展示:
05 应用ggplot2
Seurat的所有绘图功能在默认情况下都会输出基于 ggplot2 绘制的图片,因此我们可以像任何其他基于 ggplot2 的绘图方法一样,调整参数修改图片。
1.添加title
2.修改边框
这里用到了
ggmin
这个包,如果之前没有安装的话,需要运行第二行代码先安装。
3.修改Seurat主题
不只是上面图片展示出来的效果,还有很多可以修改的Seurat主题可以通过
?SeuratTheme
进行查看
例如:
…………
这些主题和样式可以用来自定义Seurat包生成的图形,使得图形更加符合展示需求。
比如下面这样:
06 交互式绘图
官网是这样进行介绍的
(Seurat官网:
https://satijalab.org/seurat/
)
简单来说就是Seurat 包提供了一个功能,允许用户创建可以与用户进行交互的图表。一旦你使用 ggplot2 创建了一个散点图,比如通过 Seurat 的 DimPlot() 或 FeaturePlot() 函数,你可以将这个图表传递给 Seurat 的 HoverLocator() 函数。HoverLocator() 是 Seurat 提供的一个工具,它可以让其他用户在交互式图表上悬停鼠标时获取更多信息,比如数据点的详细信息。这样,用户就可以通过鼠标悬停来探索图表中的数据点,使得数据分析过程更加直观和动态。
大概就是下面这两张图的效果:
Seurat 提供的另一个交互式功能是能够手动选择细胞以进行进一步的研究。
1.
手动选择细胞
:在单细胞数据分析中,有时自动聚类方法可能无法将某些细胞群体完全分开。这时,研究人员可能希望根据自己在可视化图上的观察,手动选择这些细胞进行进一步研究。
2.
使用ggplot2散点图
:为了手动选择细胞,用户需要首先创建一个基于ggplot2的散点图。这可以通过Seurat的
DimPlot()
或
FeaturePlot()
函数来实现。这些函数会生成一个散点图,显示细胞在某个降维空间(如tSNE)中的分布。
3.
传递图表给CellSelector()
:创建好散点图后,用户可以将这个图表传递给
CellSelector()
函数。这个函数是Seurat提供的一个交互式工具,它允许用户在散点图上点击选择特定的细胞。
4.
返回选择的细胞名称
:
CellSelector()
函数会返回一个向量,其中包含了用户在散点图上选择的细胞的名称。这个向量可以用来标识这些特定的细胞。
5.
进行差异表达分析
:一旦用户有了这个细胞名称的向量,他们就可以将这些细胞设置为一个新的身份类别,并使用Seurat或其他工具进行差异表达分析。差异表达分析可以帮助研究人员了解这些细胞与其他细胞在基因表达上的差异,从而揭示它们可能具有的独特功能或状态。
举例来说,如果树突状细胞(DCs)在聚类分析中与单核细胞混合在一起,但研究人员希望根据它们在tSNE图上的位置来研究它们的独特性,他们可以使用上述的方法手动选择这些细胞,然后对它们进行更详细的分析。
然后我们点
done
就可以把这部分细胞选出来,自己弄成一个mini-cluster。
然后我们可以通过
FindMarkers
将这群细胞从单核细胞当中区分出来
Seurat 包中的 CellSelector() 函数的一个高级功能就是使用 CellSelector 自动分配细胞身份。
CellSelector()
不仅可以让用户手动选择细胞并返回这些细胞的名称列表,还可以直接为这些选定的细胞分配一个新的身份类别。这样,用户就不需要手动在 Seurat 对象中设置这些细胞的新身份,而是可以直接通过
CellSelector()
完成这一过程。
具体操作步骤如下:
1.用户首先使用 Seurat 对象创建一个散点图,例如通过 DimPlot() 或 FeaturePlot() 函数。
2.用户在散点图上使用 CellSelector() 选择感兴趣的细胞。
3.然后,用户将原始的 Seurat 对象和一个新定义的身份类别(例如 "selected")作为参数传递给 CellSelector()。
4.CellSelector() 会处理这些信息,返回一个新的 Seurat 对象,其中包含了选定的细胞,并且这些细胞的身份类别已经被设置为用户指定的新类别(在这个例子中是 "selected")。
然后在交互式图片当中选择感兴趣的细胞群,
done
以后就直接被添加到数据集当中了
这部分在推文上不是很直观,强烈建议大家自己跑跑代码,就能有直观的认识了!
07 绘图辅助函数
Seurat 包在提供交互式图表功能的同时,还引入了一些新的辅助函数。这些辅助函数的目的是为了让用户能够更方便地对图表进行操作和组合。具体来说:
1.
操作图表
:辅助函数可能包括调整图表的样式、颜色、标签、轴等,以便用户可以根据需要定制图表的外观和布局。
2.
组合图表
:辅助函数也可能允许用户将多个图表合并为一个,或者在同一个图形窗口中并排或叠加显示,这样可以在一个视图中展示更多的数据或分析结果。
上面的代码可以去掉右边的legend,直接在图片上把cluster的名称添加上去