跟着Cell学作图 | 5.UMAP降维分析

跟着 Cell 学作图 | 5.UMAP降维分析

“实践是检验真理的唯一标准。”

“复现是学习R语言的最好办法。”

2021.4.12_1

DOI: 10.1016/j.cell.2020.05.032

这篇2020年发表在cell上关于新冠的组学文章里面有大量的生信内容。今天带大家复现其中的一个Supplemental FigureUMAP降维分析图

210421_1

本文代码及示例数据领取:后台回复“20210422

UMAP

UMAP (Uniform Manifold Approximation and Projection) 算法是一种创新的降维流形学习算法。来自于拓扑数据分析。可以用于类似于t-SNE的可视化,但也可以用于一般的非线性降维。文章里的这个图可以看出,sars-cov-2感染患者的血清组学数据与健康个体的组学数据得到了很好的分辨,而其他组则表现出一定程度的分离。

数据格式

210421_2

注:示例数据仅作展示用,无实际意义!

绘制

很显然,重点在于umap分析,可视化只是常见的散点图。

#------
title: "UMAP"
author: "MZBJ"
date: "2020/4/22"
#-----
# 初次使用需要安装
#install.packages("uamp")
rm(list = ls())
setwd("F:/~/mzbj/cell/2021.4.22")
# 载
library(umap)
library(ggplot2)
#导入数据,首列为行名
df <- read.csv(file = "df_umap.csv",row.names = 1) 
#生成一个不含lable列的新数据集
df_umap <- df[,colnames(df)!='label']
#按行进行标准化
df_umap <- data.frame(t(apply(df_umap,1,function(v){(v-mean(v,na.rm=T))/sd(v,na.rm=T)})),stringsAsFactors=F)
#替换NA为0
df_umap[is.na(df_umap)] <- 0
#UMAP分析
umap <- umap(df_umap,method='naive',n_neighbors = 10)
#n_neighbors 用似的局部邻域的大小(根据邻域采样点的数量)。数值越大,流形的全局视图就越多,而数值越小,保留的局部数据就越多。通常值应该在2到100的范围内。
#method 可用的方法是“naive”(用纯R编写的实现)和“umap-learn”(需要python包“umap-learn”)
# 查看降维后的结果
head(umap$layout)
#提取umap值作图用
df1 <- data.frame(umap$layout)
df1$label <- df$label #加入lavle列
colnames(df1) <- c('X','Y','label') #改个列名 不改也行

  
p <- ggplot(df1, aes(x=X, y=Y, colour=label)) + geom_point(size=4)+
  xlab(NULL)+ #不添加x y轴名称
  ylab(NULL)
p <- p + theme(  panel.grid.major = element_blank(),
                 panel.grid.minor = element_blank(),
                 legend.title=element_blank(), #图例标签隐藏
                 panel.border = element_blank(),
                 axis.line.x = element_line(color="black", size = 0.5),
                 axis.line.y = element_line(color="black", size = 0.5),
                panel.background = element_blank())
#按文章的配色改个颜色
p <- p +  scale_colour_manual(values=c("#D58F25","#882424","#7DA92E","#5A7EB3"))
p
#保存为svg格式图片
ggsave(p,filename = "umap.svg",width = 5,height = 4)

出图:

210422_3

又是一模一样哈哈~

写在后面:

本系列重在复现,所以有些细节可能讲的不是很详细。大家有问题可以后台私信,或者在我的B站:木舟笔记进行互动!制作不易,希望大家多多支持!

参考

  1. https://github.com/lmcinnes/umap

  2. https://cran.r-project.org/web/packages/umap/vignettes/umap.html


往期内容:

跟着CELL学作图|1.火山图

跟着Cell学作图 | 2.柱状图+误差棒+散点+差异显著性检验

跟着 Cell 学作图 | 3.箱线图+散点+差异显著性检验

跟着 Cell 学作图 | 4.小提琴图

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
在 MATLAB 中进行 UMAP 维,你可以使用 umap-learn 包。这是一个 Python 库,它实现了 UMAP 算法,并且可以通过 MATLAB 的 Python 接口来使用。 首先,你需要确保你已经安装了 Python 和 umap-learn 库。然后,你可以按照以下步骤在 MATLAB 中使用 UMAP 进行维: 1. 在 MATLAB 的命令窗口中,输入以下命令启动 Python 解释器: ```matlab pyversion <path/to/your/python/executable> ``` 请将 `<path/to/your/python/executable>` 替换为你的 Python 可执行文件的路径。例如,如果你的 Python 安装在 "C:\Python\python.exe",则命令将如下所示: ```matlab pyversion C:\Python\python.exe ``` 2. 在 MATLAB 的命令窗口中,输入以下命令来导入 umap-learn 库: ```matlab py.importlib.import_module('umap') ``` 3. 准备你的数据,将其转换为一个 NumPy 数组。然后,将数据传递给 UMAP 的 `fit_transform` 函数,以获取维后的结果。以下是一个示例: ```matlab data = rand(100, 10); % 假设你有一个大小为 100x10 的数据矩阵 data_np = py.numpy.array(data); % 将数据转换为 NumPy 数组 umap = py.umap.UMAP(); % 创建 UMAP 对象 embedding = umap.fit_transform(data_np); % 进行维 % 将结果转换回 MATLAB 数组 embedding_matlab = double(py.array.array('d', py.numpy.nditer(embedding))); % 可以绘制维后的结果或进行其他处理 scatter(embedding_matlab(:, 1), embedding_matlab(:, 2)); ``` 在上面的示例中,我们首先使用 `py.numpy.array` 将 MATLAB 数组转换为 NumPy 数组。然后,我们创建了一个 UMAP 对象,并使用 `fit_transform` 函数对数据进行维。最后,我们将结果转换回 MATLAB 数组,并使用 `scatter` 函数绘制维后的结果。 请注意,这只是一个简单的示例。你可能需要根据你的数据和需求进行适当的调整。 希望这可以帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值