单细胞数据Seurat包的tSNE三维可视化
Seurat是目前单细胞数据分析最常用的软件之一,本文介绍下如何在Seurat里做三维的tsne计算以及进行可视化展示。
1.三维坐标计算:
这里假设单细胞数据已经从counts matrix 走到了tSNE降维的前一步,在此使用RunTSNE()进行tsne的三维降维计算:
set.seed(1)
data.combined <- RunTSNE(data.combined, reduction = "pca", dims = 1:20,dim.embed=3)
dim(data.combined@reductions$tsne)
#[1] 16749 3
我们可以得到所有细胞(笔者是16749个细胞)在3D空间上的三维坐标。如果不加dim.embed=3参数则是默认的二维空间坐标。
2.可视化:
前期数据准备,提取tSNE降维后的三维坐标数据,以及制作颜色条。
tmp.tsne.3<-Embeddings(object = data.combined[["tsne"]])
cb_palette <- c("#ed1299", "#09f9f5", "#246b93", "#cc8e12", "#d561dd", "#c93f00", "#ddd53e","#4aef7b",
"#e86502", "#9ed84e", "#39ba30", "#6ad157", "#8249aa", "#99db27", "#e07233", "#ff523f",
"#ce2523", "#f7aa5d", "#cebb10", "#03827f", "#931635", "#373bbf", "#a1ce4c", "#ef3bb6",
"#d66551","#1a918f", "#ff66fc", "#2927c4", "#7149af" ,"#57e559" ,"#8e3af4" ,"#f9a270" ,
"#22547f", "#db5e92","#edd05e", "#6f25e8", "#0dbc21", "#280f7a", "#6373ed", "#5b910f" ,
"#7b34c1" ,"#0cf29a","#d80fc1","#dd27ce", "#07a301", "#167275", "#391c82", "#2baeb5",
"#925bea", "#63ff4f")
#笔者注,一般分的clusters较多时,常用的颜色配置函数配出来的颜色区分度不明显,笔者在网上搜到上述50个颜色分类,感觉比较好用,就作为自己常用的颜色条使用。
生成每个细胞因所属不同cluster进而所对应的不同颜色:
cb_palette.use <- cb_palette[1:length(unique(data.combined$seurat_clusters))]
col_match <- data.frame(cluster=unique(data.combined$seurat_clusters),col=cb_palette.use)
col_draw<- col_match[match(data.combined$seurat_clusters,col_match[,1]),2]
2.1 方法一,使用plot3d进行可视化
library(rgl)
plot3d(
tmp.tsne.3,
col = col_draw,
type = 'p', radius = .001,axes=T,box=F)
得到如下的三维交互式可视化图:
2.2 方法二,使用plotly进行可视化
library(plotly)
tmp.tsne.3 <- as.data.frame(tmp.tsne.3)
fig <- plot_ly(tmp.tsne.3, x = ~tSNE_1, y = ~tSNE_2, z = ~tSNE_3, color =data.combined$seurat_clusters, colors = cb_palette.use,size=2)
fig
展示的同样是一个动态的三维图:
点击左上角的Export > Save as Web Page,即可存储成html格式,在浏览器中动态展示三维可交互图。
一般情况下,tSNE的二维展示即可满足要求,三维的展示可以一定程度上让我们更直观的发现cluster之间的距离,理解不同细胞群之间的关系。但是由于tSNE算法本身对距离的计算不够准确,所以此三维展示的方法对生物学意义的理解仅供参考。