在单细胞PCA降维结果理解以及细胞聚类分群及其可视化中,除了有PCA以及聚类分群结果的可视化以外,都展示了一下UMAP图
UMAP图是运行完RunUMAP()的线性降维可视化结果,和RunUMAP()同样起非线性降维作用的还有RunTSNE()
在单细胞PCA降维结果理解中,我们运行完RunPCA之后,一共会保留下来50个维度,根据不同维度的相关性基因可以区分不同的细胞类群。但PCA通常只能显示数据的线性结构,不够直观。
可以使用t-分布邻域嵌入算法(t-SNE)或统一流形逼近与投影(UMAP)等非线性降维方法,在二维或三维图中为每个数据点提供一个位置,对高维数据进行可视化
pbmc <- RunTSNE(pbmc,
reduction = "pca",
dims = 1:10,
dim.embed = 3)
常用的几个参数有:
降维结果也是存放在reductions里面
和PCA结果不同的是,TSNE降维的结果只有cell.embeddings里面是有数值的,储存着细胞的坐标信息,基于坐标信息可以进行可视化
可以使用Dimplot简单可视化tsne的二维结果图
pbmc <- RunTSNE(pbmc,
reduction = "pca",
dims = 1:10,
dim.embed = 2)
DimPlot(pbmc,label = T,reduction = 'tsne',pt.size =2)
在生信菜鸟团的#单细胞周更中,有一期就是对TSNE和UMAP图进行美化——tsne及umap图美化
使用ggplot2美化:
#提取坐标数据
tSNE=pbmc@reductions$tsne@cell.embeddings %>%
as.data.frame() %>%
cbind(celltype=pbmc@meta.data$celltype)
# 设置标签坐标
label <- tSNE %>%
group_by(celltype)%>%
summarise(tSNE_1 = median(tSNE_1), tSNE_2 = median(tSNE_2))
#使用ggplot2绘图
p <- ggplot(data = tSNE, aes(x = tSNE_1, y = tSNE_2)) +
geom_point(aes(color = celltype),
size = 2,
alpha = 0.8)+
stat_ellipse(aes(color = celltype),
level = 0.95, linetype = 2, show.legend = F)+
geom_text(data = label,
aes(x = tSNE_1, y = tSNE_2, label = celltype),
color = 'black', size = 5)
p
对比Dimplot直接绘图和使用ggplot简单调整之后的图:
当然还有更多的细节可以调整,Dimplot函数也有很多参数可以选择,后面我们再来探讨!
dim.embed
参数可以调整TSNE的维度,所以我们可以保留三个维度来进行可视化
pbmc <- RunTSNE(pbmc,
reduction = "pca",
dims = 1:10,
dim.embed = 3)
三维立体图可视化就可以用到scatterplot3d——Plots a three dimensional (3D) point cloud这个包
tSNE三维可视化步骤:
#加载R包
library(dplyr)
library(scatterplot3d)
#指定数据和颜色
plot = tSNE_3d
class(plot)
color.bin <- c("#D9AB42","#A35E47","#0F4C3A","#563F2E","#78C2C4","#C73E3A","#B47157","#2B5F75")
plot <- plot %>%
mutate(ID=rownames(plot),
Type=pbmc@meta.data$celltype,
TypeColor=color.bin[as.numeric(as.factor(Type))])
#scatterplot3d绘制三维图
scatterplot3d(x = plot$tSNE_1,
y = plot$tSNE_2,
z = plot$tSNE_3,
color = plot$TypeColor,
pch = 16, cex.symbols = 1,
scale.y = 0.7, angle = 45,
xlab = "tSNE_1", ylab = "tSNE_2", zlab = "tSNE_3",
main="3D Scatter Plot of tSNE",
col.axis = "#444444", col.grid = "#CCCCCC")
#legend加上标签信息
legend("bottom", legend = levels(as.factor(plot$Type)),
col = color.bin, pch = 16,
inset = -0.25,xpd = TRUE, horiz = FALSE,ncol = 3)
从二维看起来,tsne和PCA的结果差异不算很大,但PCA结果中因为有feature.loding
的基因信息,所以不同维度根据其相关性基因可以对细胞亚群进行区分
DimPlot(pbmc,label = T,reduction = 'pca')+DimPlot(pbmc,label = T,reduction = 'tsne',pt.size =2)
从三维立体图看来,TSNE的降维后可视化的结果会更直观一些,相似的标签被聚类在一起
PCA
TSNE