ixxmu / mp_duty

抓取网络文章到github issues保存
https://archives.duty-machine.now.sh/
124 stars 30 forks source link

来给单细胞UMAP图加上个比例饼图!手把手教你 #5958

Closed ixxmu closed 4 days ago

ixxmu commented 4 days ago

https://mp.weixin.qq.com/s/EdGdDDLfkqlywZQ_QO11EQ

ixxmu commented 4 days ago

<NoMethodError: undefined method `content' for nil:NilClass>

ixxmu commented 4 days ago

来给单细胞UMAP图加上个比例饼图!手把手教你 by 生信作曲家

前言

生信作曲家一直致力于构建国内和谐、开放、可持续的生物信息交流平台。生信作曲家的目标是为每个科研人扫清科研路上的一切障碍,让生物信息学人人可做。目前,生信作曲家已推出"跟着一区文章学通机器学习”、"跟着一区文章学通单细胞"、"空间转录组从入门到精通”、孟德尔随机化实战”、scFEANATMI、CIBERSORTx、hdWGCNA、cytotalk、metaVIPER算法等多种强力教程,同时也兼具数据整理、可视化等核心入门技术教学,开办空间转录组计划smrsp/sp、孟德尔随机化系列计划IM/MR)、临床数据库系列、肿瘤发文计划RS/max,非肿瘤发文计划note/ultra/pro、暑期集训营和冬季集训营等多次。辅导同学实现纯生信SCI发表硕果累累,帮助同学实现医学事业路上的理想与追求。

今天我们来学习给单细胞降维UMAP图加上每个cluster的组别分布,用来展示每个seurat_clusters细胞都属于哪个组。类似下图。

首先你需要自己完成一个右上角图,当然这是比较简单的。我们要做的是下面两个图的类型。






代码实操

load('scRNA.Rdata')

整合后的单细胞数据在seurat_integrated中

载入包

library(cowplot)
library(ggpubr)
library(dplyr)
library(readr)
library(tidyr)
library(ggforce)
library(pals)
library(pheatmap)
library(scales)
library(ggthemes)
library(Seurat)
library(ggplot2)
library(scatterpie)

把umap坐标提取出来

groupCols <- c('HC'="#00AFBB",  'UC'="#FC4E07" )
cell_eb <- data.frame(seurat_integrated@reductions[["umap"]]@cell.embeddings[,1:2],cluster=as.character(seurat_integrated$seurat_clusters),group=as.character(seurat_integrated$disease), stringsAsFactors = F)
colnames(cell_eb) <- c('x','y','cluster''group')
head(cell_eb)

将每个点按照分组进行填充

p1 <- ggplot(data=cell_eb, aes(x,y)) + geom_point(aes(colour = factor(group)), alpha=0.5, size=0.25,show.legend = F) +
  scale_color_manual(values = alpha(groupCols, alpha = 0.3),breaks=NULL) + theme_pubr()+ NoAxes() 
p1

计算每个cluster两个组别所占各自总组别的比例

df <- seurat_integrated@meta.data %>% dplyr::count(seurat_clusters, disease) 
df$n <- df$n/as.numeric(table(seurat_integrated@meta.data$disease)[df$disease]) 
print(df)

每个簇的饼图位置

coords <- cell_eb %>% group_by(cluster) %>% dplyr::summarise(x=median(x), y=median(y)) %>% as.data.frame
coords <- coords %>% mutate(x,y)
print(coords)

添加半径

piedf <- reshape2::acast(df, seurat_clusters ~ disease, value.var = "n")
piedf[is.na(piedf)] <- 0
piedf <- as.data.frame(piedf)
piedf$cluster <- rownames(piedf)
piedf<- merge(piedf, coords)
cellnumbers <- dplyr::count(cell_eb, cluster)
piedf$cluster <- as.numeric(piedf$cluster)
piedf<- arrange(piedf,cluster)
sizee <- cellnumbers[match(piedf$cluster, cellnumbers[,1]), 2]
piedf$radius <- scales::rescale(sizee, c(0.4,0.9))
piedf$cluster <- as.character(piedf$cluster)
print(piedf)

绘制饼图

p2<-  p1  + 
  geom_scatterpie(aes_(x=~x,y=~y,r=~radius), data=piedf,
                  cols=c('HC','UC'),show.legend = TRUE) +
  coord_equal() + scale_fill_manual(values = groupCols,name=NULL)
p2



后记


添加管理员微信 Bio_com或扫描下方二维码交流更多。


最后,我们推出一个免费赠书活动。这本教材最大的特点是注重实践应用,提供大量案例并配套视频教程,教读者使用SPSS、GraphPad Prism等软件进行实战,确保学以致用。只需要点赞,在看本文,即可参与抽奖!每800阅读量即可赠送一本,例如本推送阅读量为1700,即可有两名幸运同学即可获取本书,备注“赠书