单细胞数据降维3D可视化(scatterplot3d 包)

生信碱移

单细胞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 异质性还是蛮大的。

今天就分享到这里 

欢迎各位点击关注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值