前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >scRNA复现|所见即所得,和Cell学umap,plot1cell完成惊艳的细胞注释umap图

scRNA复现|所见即所得,和Cell学umap,plot1cell完成惊艳的细胞注释umap图

作者头像
生信补给站
发布于 2023-08-25 02:27:24
发布于 2023-08-25 02:27:24
2.4K00
代码可运行
举报
文章被收录于专栏:生信补给站生信补给站
运行总次数:0
代码可运行

单细胞常见的可视化方式有DimPlot,FeaturePlot ,DotPlot ,VlnPlot 和 DoHeatmap集中 ,在Seurat中均可以实现,但文献中的图大多会精美很多。之前 scRNA分析 | 定制 美化FeaturePlot 图,你需要的都在这介绍了FeaturePlot的美化方式。在跟SCI学umap图| ggplot2 绘制umap图,坐标位置 ,颜色 ,大小还不是你说了算 介绍过DimPlot的一些调整方法,本次再介绍一种更惊艳的umap图。

2022年发表于Cell Metabolism 的Mapping the single-cell transcriptomic response of murine diabetic kidney disease to therapies 文献中有一张主图中绘制的细胞大群及亚群的umap图很惊艳,作者提供了plot1cell 包,本文介绍一下如何复现下图。

一 载入R包,数据

使用之前注释过的sce.anno.RData数据 ,后台回复 anno 即可获取 。这里要下载一下plot1cell图,大概率会提示缺少XXX包,这时候只要指定安装即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
devtools::install_github("TheHumphreysLab/plot1cell")
#根据实际缺少包进行安装
bioc.packages <- c("biomaRt","GenomeInfoDb","EnsDb.Hsapiens.v86","GEOquery","simplifyEnrichment","ComplexHeatmap")
BiocManager::install(bioc.packages)

dev.packages <- c("chris-mcginnis-ucsf/DoubletFinder","Novartis/hdf5r","mojaveazure/loomR")
devtools::install_github(dev.packages)
#再重新装一次
devtools::install_github("TheHumphreysLab/plot1cell")

library(plot1cell)
library(Seurat) 
library(tidyverse)
library(stringr)
library(RColorBrewer)

load("sce.anno.RData")
head(sce2,2)

已经注释过了,下面可以直接使用。

二 plot1cell 函数

1,绘制大群umap图

首先使用prepare_circlize_data函数得到绘图信息,然后plot_circlize函数可以直接绘制umap主图 并把单独的celltype圈画起来 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
###Prepare data for ploting 准备圈图数据
circ_data <- prepare_circlize_data(sce2, scale = 0.8 )
set.seed(1234)

# 设置细胞分群信息的颜色
cluster_colors<-rand_color(length(levels(sce2)))
group_colors<-rand_color(length(names(table(sce2$group))))
rep_colors<-rand_color(length(names(table(sce2$orig.ident))))

# 绘制细胞分群圈图
plot_circlize(circ_data,do.label = T, pt.size = 0.01, 
              col.use = cluster_colors ,
              bg.color = 'white', 
              kde2d.n = 1000, 
              repel = T, 
              label.cex = 0.6)

对比文章图 还缺少(1)背景颜色 ,(2)circos字体较小,(3)外面其他的圈 以及(4)四周的亚群umap图

2,背景颜色以及circos大小设置

作者的plot_circlize函数中,将circos图中的刻度和label的大小固定了,需要简单修改一下就可以修改了。修改后的plot_circlize_change 函数可以使用 circos.cex 修改circos刻度的大小 , labels.cex 修改circos上label的大小

后台回复 "circos" 即可获得plot_circlize_change 函数文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plot_circlize_change(circ_data,do.label = T, pt.size = 0.01, 
              col.use = cluster_colors ,
              bg.color = '#E0D4CA', 
              kde2d.n = 1000, 
              repel = T, 
              labels.cex = 1, 
              circos.cex = 0.5,
              label.cex = 1)

3,添加多层track

使用add_track函数添加其他细胞群注释的其他信息 ,可是是metadata中的其他列,这里使用group 和 sample 为例 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
add_track(circ_data, 
          group = "group", 
          colors = group_colors, track_num = 2) ## can change it to one of the columns in the meta data of your seurat object
add_track(circ_data, 
          group = "orig.ident",
          colors = rep_colors, track_num = 3)

到这里就完成了主图umap的绘制,其实就可以放到正文了。

三 添加细胞亚型umap

至于最后一点,其实可以用将AI / PS等工具将各个亚型小图的umap PS弄上去,但是这里还是给出使用代码的方式。

1 ,批量亚型分析

因为亚型之前没有分析,这里先批量的进行一下各个亚型的标准Seurat分析(本文不做注释,后续会介绍)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sub_celltype <- c("Epi","Myeloid" ,"Fibroblast" ,"T")

sub.celltype_list <- sapply(sub_celltype,function(slide){
  print(slide)
  sub.celltype <- subset(sce2 , celltype == slide )
  sub.celltype <- NormalizeData(sub.celltype)
  sub.celltype <- FindVariableFeatures(sub.celltype)
  sub.celltype <- ScaleData(sub.celltype ) 
  sub.celltype <- RunPCA(sub.celltype,npcs = 20)
  sub.celltype <- FindNeighbors(sub.celltype,dims = 1:20)
  sub.celltype <- FindClusters(sub.celltype, resolution = 1)
  sub.celltype <- RunUMAP(sub.celltype,dims = 1:20)
  return(sub.celltype)
}) 
sub.celltype_list

得到的是各个亚型的结果,list形式。

2 ,添加四周亚型umap图

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
my36colors <-c('#E5D2DD', '#53A85F', '#F1BB72', '#F3B1A0', '#D6E7A3', '#57C3F3', '#476D87',
               '#E95C59', '#E59CC4', '#AB3282', '#23452F', '#BD956A', '#8C549C', '#585658',
               '#9FA3A8', '#E0D4CA', '#5F3D69', '#C5DEBA', '#58A4C3', '#E4C755', '#F7F398',
               '#AA9A59', '#E63863', '#E39A35', '#C1E6F3', '#6778AE', '#91D0BE', '#B53E2B',
               '#712820', '#DCC1DD', '#CCE0F5',  '#CCC9E6', '#625D9E', '#68A180', '#3A6963',
               '#968175'
)
###Fibroblast subtypes
Fibroblast <- sub.celltype_list$Fibroblast
Idents(Fibroblast) <- "seurat_clusters"
subcolors <- my36colors[1:nlevels(Fibroblast)]
#subcolors <- c('#bff542','#83f78f','#EBA1A2','#D70016','#eab3fc','#83b1f7','#D70016','#eab3fc','#83b1f7')
Fibroblast_meta<-get_metadata(Fibroblast, color = subcolors)

Fibroblast_meta %>%
  dplyr::group_by(seurat_clusters) %>%
  summarize(x = median(x = x),y = median(x = y)) -> centers_Fib

points(Fibroblast_meta$x*0.32-1.2,Fibroblast_meta$y*0.32-0.73, pch = 19, col = alpha(Fibroblast_meta$Colors,0.5), cex = 0.1);
text(centers_Fib$x*0.32-1.2,centers_Fib$y*0.32-0.73, labels=centers_Fib$seurat_clusters, cex = 0.6, col = 'black')

注意这里的subcolors 可以自定义,也可以每次都使用my36colors 中的颜色,但是一定要注意以下2点

(1) subcolors 要和 Idents(Fibroblast)中的nlevels一致。

(2)Fibroblast_metax*0.32-1.2和后面Fibroblast_metay*0.32-0.73 中的 0.32 ,1.2 ,0.73等 数值代表位置,可能需要多次尝试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#T subtypes
T.sub <- sub.celltype_list$T
subcolors <- my36colors[1:nlevels(T.sub)]
T_meta<-get_metadata(T.sub, color = subcolors)
T_meta %>%
  dplyr::group_by(Cluster) %>%
  summarize(x = median(x = x),y = median(x = y)) -> centers_T
points(T_meta$x*0.32+1.2,T_meta$y*0.32+0.73, pch = 19, col = alpha(T_meta$Colors,0.5), cex = 0.1);
text(centers_T$x*0.32+1.2,centers_T$y*0.32+0.73, labels=centers_T$Cluster, cex = 0.6, col = 'black')

#Myeloid subtypes
Myeloid.sub <- sub.celltype_list$Myeloid
subcolors <- my36colors[1:nlevels(Myeloid.sub)]
Myeloid_meta<-get_metadata(Myeloid.sub, color = subcolors)
Myeloid_meta %>%
  dplyr::group_by(Cluster) %>%
  summarize(x = median(x = x),y = median(x = y)) -> centers_Mye
points(Myeloid_meta$x*0.32-1.2,Myeloid_meta$y*0.32+0.73, pch = 19, col = alpha(Myeloid_meta$Colors,0.5), cex = 0.1);
text(centers_Mye$x*0.32-1.2,centers_Mye$y*0.32+0.73, labels=centers_Mye$Cluster, cex = 0.6, col = 'black')

##Epi subtype
Epi.sub <- sub.celltype_list$Epi
subcolors <- my36colors[1:nlevels(Epi.sub)]
Epi_meta<-get_metadata(Epi.sub, color = subcolors)
Epi_meta %>%
  dplyr::group_by(Cluster) %>%
  summarize(x = median(x = x),y = median(x = y)) -> centers_Epi

points(Epi_meta$x*0.3+1.2,Epi_meta$y*0.3-0.73, pch = 19, col = alpha(Epi_meta$Colors,0.5), cex = 0.1);
text(centers_Epi$x*0.3+1.2,centers_Epi$y*0.3-0.73, labels=centers_Epi$Cluster, cex = 0.6, col = 'black')

3 ,添加四周umap的title 和 track的legend

(1)添加,优化四周umap的title ,注意位置和大小

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
title_text <- function(x0, y0, x1, y1, text, rectArgs = NULL, textArgs = NULL) {
  center <- c(mean(c(x0, x1)), mean(c(y0, y1)))
  do.call('rect', c(list(xleft = x0, ybottom = y0, xright = x1, ytop = y1), rectArgs))
  do.call('text', c(list(x = center[1], y = center[2], labels = text), textArgs))
}

title_text(x0 = -1.35, x1 = -1.05, y0 = -1.06, y1=-1, text = 'Fibroblasts',
           rectArgs = list(border='#F9F2E4',lwd=0.5),
           textArgs = list(col='black',cex = 1))

title_text(x0 = 1.05, x1 = 1.35, y0 = -1.06, y1=-1, text = 'Epi cells',
           rectArgs = list(border='#F9F2E4',lwd=0.5),
           textArgs = list(col='black',cex = 1))

title_text(x0 = -1.35, x1 = -1.05, y0 = 1.06, y1=1, text = 'Myeloid',
           rectArgs = list(border='#F9F2E4',lwd=0.5),
           textArgs = list(col='black',cex = 1))

title_text(x0 = 1.05, x1 = 1.35, y0 = 1.06, y1=1, text = 'T cells',
           rectArgs = list(border='#F9F2E4',lwd=0.5),
           textArgs = list(col='black',cex = 1))

(2)添加track的legend

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#plot group#
col_use<-c('#00288A','#DD001F','#84D000','#00CB47','#947F00','#006234')
cc<-get_metadata(sce2, color = col_use)
cc %>%
  dplyr::group_by(celltype) %>%
  summarize(x = median(x = x),y = median(x = y)) -> centers
col_group<-c('darkgreen','blue')
lgd_points = Legend(labels = names(table(cc$group)), type = "points", 
                    title_position = "topleft", 
                    title = "Group",
                    title_gp = gpar(col='black',fontsize = 7, fontface='bold'),
                    legend_gp = gpar(col = col_group),
                    labels_gp = gpar(col='black',fontsize = 5),
                    grid_height = unit(2, "mm"),
                    grid_width = unit(2, "mm"),
                    background = col_group)
draw(lgd_points, x = unit(15, "mm"), y = unit(50, "mm"),
     just = c("right", "bottom"))

OK ,搞定!

参考资料:

https://github.com/TheHumphreysLab/plot1cell

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信补给站 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【Kaggle竞赛】模型测试
是骡子是马拉出来溜溜就知道,一个模型好还是坏,放在全新的测试集上去测试下就知道了,根据模型测试的结果我们才能衡量模型的泛化性、稳定性等指标如何,从而方便我们根据测试的反馈去进行调参优化模型。
嵌入式视觉
2022/09/05
6350
【Kaggle竞赛】模型测试
TensorFlow 2.0 - tf.data.Dataset 数据预处理 & 猫狗分类
项目及数据地址:https://www.kaggle.com/c/dogs-vs-cats-redux-kernels-edition/overview
Michael阿明
2021/02/19
2.5K0
TensorFlow 2.0 - tf.data.Dataset 数据预处理 & 猫狗分类
pytorch训练kaggle猫狗大战分类器
这篇文章来写一下用 pytorch 训练的一个 CNN 分类器,数据集选用的是 kaggle 上的猫狗大战数据集,只有两个 class ,不过数据集还是挺多的,足够完成我们的分类任务。这份数据集分为 train 和 test 两个文件夹,装着训练集和测试集,还有一个 sample_submission.csv 用来提交我们训练的模型在测试集上的分类情况。值得注意的是,训练集是带标签的,标签在文件名中,如 cat.7741.jpg,而测试集是不带标签的,因为我们模型在测试集中测试后分类的结果是要填到 csv 文件中提交的,所以不能拿测试集来评估模型,我们可以在训练集中划分出一个验证集来评估模型。
棒棒鸡不棒
2022/09/02
1.3K0
pytorch训练kaggle猫狗大战分类器
干货 | Tensorflow设计简单分类网络实现猫狗图像分类训练与测试
第一层:32个feature map 5x5卷积、步长为2、最大值池化 局部相应归一化处理(LRN) 第二层:64个feature map 3x3卷积、步长为1、没有池化 第三层:128个feature map 3x3卷积、步长为1、最大值池化 局部相应归一化处理(LRN) 扁平层操作12x12x128个神经元 输出层操作2个神经元输出、sigmoid激活函数 卷积层采用relu作为激活函数。
OpenCV学堂
2018/12/12
2.4K0
干货 | Tensorflow设计简单分类网络实现猫狗图像分类训练与测试
【Kaggle竞赛】AlexNet模型定义及实现
在图像识别/目标检测领域,基本上CNN的天下,从基础的AlexNet,再到后面更深的GoogleNet、VGGNet等,再到收敛速度更快、泛化性更强ResNet等残差网络,从2012年到现在CNN网络在图像识别/目标检测领域可谓是一个很好的方法。
嵌入式视觉
2022/09/05
3820
【Kaggle竞赛】AlexNet模型定义及实现
【Kaggle竞赛】迭代训练模型
CV领域中,在完成数据准备工作和设计定义好模型之后,我们就可以去迭代训练模型了,通过设置调节不同的超参数(这需要理论知识和丰富的经验)来使得损失(loss)和准确率(accuracy)这两个常用的指标达到最优。一般在训练完成之后,都需要通过损失曲线图和准确率曲线图来衡量整个训练过程。
嵌入式视觉
2022/09/05
7710
【Kaggle竞赛】迭代训练模型
开源图书《Python完全自学教程》12.6机器学习案例12.6.2猫狗二分类
深度学习是机器学习的一个分支,目前常用的深度学习框架有 TensorFlow、PyTorch和飞桨等(飞桨,即 PaddlePaddle,全中文的官方文档,让学习者不为语言而担忧)。本小节中将以 PyTorch 演示一个经典的案例,让初学 Python 的读者对深度学习有感性地认识。所以,以下代码可不求甚解,只要能认识到所涉及到的基础知识并不陌生即可——除了 PyTorch 部分。
老齐
2022/12/09
7800
开源图书《Python完全自学教程》12.6机器学习案例12.6.2猫狗二分类
迁移学习之快速搭建【卷积神经网络】
卷积神经网络 概念认识:https://cloud.tencent.com/developer/article/1822928
一颗小树x
2021/05/14
2K0
迁移学习之快速搭建【卷积神经网络】
从零开始学keras(七)之kaggle猫狗分类器
【导读】Keras是一个由Python编写的开源人工神经网络库,可以作为Tensorflow、和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化。本系列将教你如何从零开始学Keras,从搭建神经网络到项目实战,手把手教你精通Keras。相关内容参考《Python深度学习》这本书。
墨明棋妙27
2022/08/24
1.4K0
从零开始学keras(七)之kaggle猫狗分类器
MOOC TensorFlow入门实操课程代码回顾总结(二)
欢迎来到TensorFlow入门实操课程的学习 MOOC TensorFlow入门实操课程代码回顾总结(一) MOOC TensorFlow入门实操课程代码回顾总结(三) 注: 用于表示python代码 粘贴运行结果 目录 5 图像分类基础应用——猫狗分类案例 5.1 导入库 5.2 下载数据集 5.3 查看样本数目 5.4 创建文件夹,存放训练测试数据 5.5 切分为训练数据和测试数据 5.6 模型构建 5.7 数据预处理 5.8 模型训练 5.9 训练结果可视化 5.10 模型推理 6 迁移学
荣仔_最靓的仔
2022/01/05
5740
MOOC TensorFlow入门实操课程代码回顾总结(二)
深度学习中超大规模数据集的处理
在机器学习项目中,如果使用的是比较小的数据集,数据集的处理上可以非常简单:加载每个单独的图像,对其进行预处理,然后输送给神经网络。但是,对于大规模数据集(例如ImageNet),我们需要创建一次只访问一部分数据集的数据生成器(比如mini batch),然后将小批量数据传递给网络。其实,这种方法在我们之前的示例中也有所涉及,在使用数据增强技术提升模型泛化能力一文中,我就介绍了通过数据增强技术批量扩充数据集,虽然那里并没有使用到超大规模的数据集。Keras提供的方法允许使用磁盘上的原始文件路径作为训练输入,而不必将整个数据集存储在内存中。
云水木石
2019/07/02
1.5K0
深度学习中超大规模数据集的处理
深度学习入门数据集--2.fasion-mnist数据集
数据可以从git仓库上下载,https://github.com/zalandoresearch/fashion-mnist fasion-mnist 作为tensorflow分类教程数据,通过访问链接可以获得更多内容https://www.tensorflow.org/tutorials/keras/basic_classification
birdskyws
2019/03/06
1.8K0
【深度学习实战:kaggle自然场景的图像分类-----使用keras框架实现vgg16的迁移学习】
本次数据集来自kaggle,该数据集包括自然场景的图像。模型应该预测每个图像的正确标签。 您的目标是实现分类问题的高精度。
机器学习司猫白
2025/01/21
2060
【深度学习实战:kaggle自然场景的图像分类-----使用keras框架实现vgg16的迁移学习】
【动手学深度学习笔记】之图像分类数据集(Fashion-MNIST)
这个数据集是我们在后面学习中将会用到的图形分类数据集。它的图像内容相较于手写数字识别数据集MINIST更为复杂一些,更加便于我们直观的观察算法之间的差异。
树枝990
2020/08/20
4.1K0
【动手学深度学习笔记】之图像分类数据集(Fashion-MNIST)
【深度学习基础】线性神经网络 | 图像分类数据集
深度学习 (DL, Deep Learning) 特指基于深层神经网络模型和方法的机器学习。它是在统计机器学习、人工神经网络等算法模型基础上,结合当代大数据和大算力的发展而发展出来的。深度学习最重要的技术特征是具有自动提取特征的能力。神经网络算法、算力和数据是开展深度学习的三要素。深度学习在计算机视觉、自然语言处理、多模态数据分析、科学探索等领域都取得了很多成果。本专栏介绍基于PyTorch的深度学习算法实现。 【GitCode】专栏资源保存在我的GitCode仓库:https://gitcode.com/Morse_Chen/PyTorch_deep_learning。
Francek Chen
2025/01/22
1490
【深度学习基础】线性神经网络 | 图像分类数据集
VGG16 训练猫狗数据集
准备数据应该是一件比较麻烦的过程,所以一般都去找那种公开的数据集。在网上找到的可以用于猫狗分类的数据集有 Kaggle 的 “Dogs vs. Cats”数据集,还有牛津大学提供的 Oxford-IIIT Pet 数据集,包含猫和狗的图片,都是非常适合做猫狗分类任务的公开数据集。
繁依Fanyi
2025/03/24
1990
PyTorch数据Pipeline标准化代码模板
PyTorch作为一款流行深度学习框架其热度大有超越TensorFlow的感觉。根据此前的统计,目前TensorFlow虽然仍然占据着工业界,但PyTorch在视觉和NLP领域的顶级会议上已呈一统之势。
机器视觉CV
2019/12/17
1.7K0
PyTorch数据Pipeline标准化代码模板
PyTorch-24h 03_图像分类
torchvision.datasets 包含许多示例数据集,可用于练习编写计算机视觉代码。FashionMNIST 就是其中之一。它有 10 个不同的图像类别(不同类型的服装),用于多分类问题。torchvision已经内置了该数据集,可以通过torchvision.datasets加载。
一只大鸽子
2023/02/24
8060
PyTorch-24h  03_图像分类
十分钟搞懂Pytorch如何读取MNIST数据集
本文用于记录使用pytorch读取minist数据集的过程,以及一些思考和疑惑吧…
全栈程序员站长
2022/07/23
5.6K0
十分钟搞懂Pytorch如何读取MNIST数据集
Python迁移学习:用Torchvision、Pytorch进行交通标志图像分类|附代码数据
本研究旨在探索如何应用迁移学习技术对交通标志图像进行分类。通过构建适用于Torchvision的图像数据集,并利用预训练模型进行微调,我们实现了对原始像素的交通标志图像的分类(点击文末“阅读原文”获取完整代码数据)。
拓端
2025/04/15
1150
Python迁移学习:用Torchvision、Pytorch进行交通标志图像分类|附代码数据
推荐阅读
相关推荐
【Kaggle竞赛】模型测试
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档