生信碱移
单细胞3D可视化
单细胞测序是一种高通量技术,能够在单细胞水平上解析基因组、转录组或表观基因组信息,揭示细胞间的异质性和罕见细胞类型。UMAP和t-SNE是常用的非线性降维方法,用于可视化单细胞测序数据的高维特征。UMAP 通过保持局部邻域结构来保留数据的全局结构,计算速度快且效果稳定。t-SNE则通过最小化高维和低维数据之间的概率分布差异,突出局部结构但计算成本较高。
▲ 10.1038/s41586-024-07698-1:这个月发表在 Nature 上的一篇单细胞文章便使用了 3D 降维可视化了细胞的分布轨迹。
可视化 UMAP 和 t-SNE 在单细胞层面具有重要意义。一般来讲,降维图上靠的比较近的细胞往往具有相似的整体基因表达水平,更可能是同一类细胞,所以这些降维图可以辅助我们进行细胞亚群鉴定。传统研究常常使用降维后的两个主成分进行 2D 可视化,某些情况下可能很难区分不同的细胞群体。3D 降维使用三个维度进行可视化,相较于 2D 降维能够保留更多信息,提高分辨率,便于从不同角度观察数据。
这篇文章中,小编向各位老铁分享一下如何使用scatterplot3d
包对单细胞进行 3D 降维可视化。
一、数据的读入
使用以下代码读入数据,并引用R包(需要提前安装好),Celltype
是 seurat 对象 metadata
中的细胞注释信息:
# install.packages("scatterplot3d")
# 参考链接: http://www.sthda.com/english/wiki/scatterplot3d-3d-graphics-r-software-and-data-visualization
library(Seurat)
library(dplyr)
library(scatterplot3d)
library(plotrix)
source('./addgrids3d.r')
# 读入数据
af <- readRDS("af.rds")
# 简单看一下数据的降维分布
DimPlot(af, pt.size = 0.2, group.by = "Celltype", reduction = "umap")
上方代码使用的脚本addgrids3d.r
下载路径如下:
-
http://www.sthda.com/sthda/RDoc/functions/addgrids3d.r
二、3D 可视化
① 重新指定参数n.components=3
计算 UMAP 或 TSNE 的前三个主成分:
# 提取UMAP降维信息并绘图,当然也可使用tsne的降维信息,这里就不展示了
af <- RunUMAP(af, dims = 1:20, reduction = "pca", n.components = 3)
af <- RunTSNE(af, dims = 1:20, reduction = "pca", n.components = 3)
umap <- af@reductions$umap@cell.embeddings %>% as.data.frame()
umap$Celltype <- af$Celltype %>% as.character()
# 整理数据
unique_celltypes <- unique(umap$Celltype)
colors <- ggsci::pal_jco()(8) # 指定颜色,可以自行修改
color_map <- setNames(colors, unique_celltypes)
data <- umap %>%
mutate(Color = color_map[Celltype])
② 进行可视化,注意下方参数注释。强调一点,降维图的顺序根据提取顺序data[, 1:3]
可以改变:
pdf(file = "scatterplot3d.pdf",width = 5,height = 5)
par(mar = c(5, 4, 4, 10), xpd = TRUE)
scatterplot3d(data[, 1:3], pch = ".", grid=FALSE, box=FALSE, color = data$Color, cex.symbol = 2)
addgrids3d(data[, 1:3], grid = c("xy", "xz", "yz"))
legend(pca.plot$xyz.convert(-25, 30, 7.5), # 调整图例位置,依次为 x,y,z
legend = levels(factor(data$Celltype)),
col = unique(data$Color),
pch = 16,
inset = 0.02,
horiz = FALSE,
ncol = 2, # 图例设置为两列
bty = "n" # 去除图例边框
)
dev.off()
▲ 结果的启示是:Hepatocytes 异质性还是蛮大的。
今天就分享到这里
欢迎各位点击关注