UMAP/TSNE降维图结合细胞比例饼图

最近微信VIP群让复现的内容有点多,有一个小伙伴提供了一篇文献,本来是要复现其中的一个内容的,但是我随意浏览了以下文章,发现了另外一张图,展示的是单细胞降维聚类图上面结合分组细胞比例饼图,这个图很新,复现也是比较简单的,所以先对这个图下手:

image.png

reference:Single-cell Transcriptomic Architecture Unraveling the Complexity of Tumor Heterogeneity in Distal Cholangiocarcinoma

本来是一个简简单单的小破图, 可是需求这个东西是无穷无尽的,以后可不敢乱提了。硬生生把一个图往天花板方向发展了。

image.png

总之,这个图还是很有用的,一个图展示了多个信息,但是凑图这个路被堵死了[图片上传中...(image-152128-1687142947490-4)]

这个内容已提前发布在微信群了,可自行下载。注释代码也已上传QQ群!

接下来我们正式做一下,首先加载单细胞对象,提取坐标和cell type。


setwd('D:/KS项目/公众号文章/单细胞聚类图上添加扇形细胞比例')
library(dplyr)
library(Seurat)
uterus <- readRDS("D:/KS项目/公众号文章/uterus.rds")
df <- uterus@reductions$tsne@cell.embeddings%>% 
  as.data.frame() %>%
  cbind(cell_type = uterus@meta.data$celltype)
colnames(df)
# [1] "tSNE_1"    "tSNE_2"    "cell_type"

然后共ggplot2做个图:

library(ggplot2)
library(dittoSeq)
library(ggrastr)
library(tidydr)
library(scatterpie)
#ggplot作图
ggplot(df, aes(x= tSNE_1 , y = tSNE_2 ,fill = cell_type))+
  geom_point_rast(size = 2,colour="grey40",shape=21) +
  scale_color_manual(values = dittoColors())+ 
  theme_dr()+
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())

image.png

然后计算细胞比例,添加上每个细胞群中心位置,用于添加饼图。也可以添加上细胞群的数量,后面做一个相对化处理,用来表示饼图大小,这个图就会更加生动。


Cellratio <- prop.table(table(uterus$orig.ident,Idents(uterus)), margin = 2)#计算各组样本不同细胞群比例
Cellratio <- as.data.frame(Cellratio)

library(tidyr)
freq <-spread(Cellratio, Var1, Freq)
colnames(freq)[1] <- 'celltype'
freq <- freq[sort(freq$celltype),]

label <- df %>%group_by(cell_type) %>%
  summarise(tSNE_1 = median(tSNE_1),
            tSNE_2 = median(tSNE_2))%>%
  as.data.frame()
rownames(label) <- label$cell_type
label <- label[c(5,3,7,6,1,2,4), ]


cell_number <- as.data.frame(table(uterus$celltype))
cell_number <- cell_number[c(5,3,7,6,1,2,4), ]
colnames(cell_number)[2]<-'cellnumber'
cell_number$cellnumber <- log2(cell_number$cellnumber)/3

data = cbind(freq,label[,c(2:3)], cell_number[,c(2)])
colnames(data)[7]<- 'cellnumber'

ggplot()+
  geom_point_rast(data=df, aes(x= tSNE_1 , y = tSNE_2 ,color = cell_type),size = 1,shape=16) +
  scale_color_manual(values = alpha(dittoColors(),0.5))+ 
  theme_dr()+
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())+
  geom_scatterpie(data=data,
                  aes(x=tSNE_1,y=tSNE_2,
                      group=celltype,
                      r=cellnumber),
                  cols=names(freq)[2:4])+
  scale_fill_manual(values = c("red", "#F0E442", "#B14380"),name='group')#修改扇形图填充颜色

image.png

最后,将细胞比例也展示在饼图山,这样就完美了。


ggplot()+
  geom_point_rast(data=df, aes(x= tSNE_1 , y = tSNE_2 ,color = cell_type),size = 1,shape=16) +
  scale_color_manual(values = alpha(dittoColors(),0.3))+ 
  theme_dr()+
  theme(panel.grid.major = element_blank(),
        panel.grid.minor = element_blank())+
  geom_scatterpie(data=data,
                  aes(x=tSNE_1,y=tSNE_2,
                      group=celltype,
                      r=cellnumber),
                  cols=names(freq)[2:4])+
  geom_text(data=data, aes(x =tSNE_1-3, y = tSNE_2+5, 
                label = paste0(formatC(HC*100, digits = 3), "%")),
            nudge_y = 0.07, nudge_x = -0.25, size = 3)+
  geom_text(data=data, aes(x =tSNE_1, y = tSNE_2-5, 
                           label = paste0(formatC(EEC*100, digits = 3), "%")),
            nudge_y = 0.07, nudge_x = -0.25, size = 3,)+
  geom_text(data=data, aes(x =tSNE_1+5, y = tSNE_2+5, 
                           label = paste0(formatC(AEH*100, digits = 3), "%")),
            nudge_y = 0.07, nudge_x = -0.25, size = 3)+
  scale_fill_manual(values = c("red", "#F0E442", "#B14380"),name='group')

image.png

在这样就完成了,感兴趣的小伙伴可以在自己文章里面展示起来了。觉得分享有用的点个赞再走呗,也可以分享给其他需要的人!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,关于t-SNE维的Python可视化,我可以给您提供以下的代码示例: ```python from sklearn.manifold import TSNE import matplotlib.pyplot as plt # 加载数据并进行t-SNE维 X_tsne = TSNE(n_components=2, random_state=33).fit_transform(X) # 可视化 plt.figure(figsize=(10, 10)) plt.scatter(X_tsne[:, 0], X_tsne[:, 1], c=y) plt.axis('off') plt.show() ``` 其中,`X`是一个形状为`(n_samples, n_features)`的特征矩阵,`y`是一个形状为`(n_samples,)`的标签向量。`TSNE`是`scikit-learn`中的一个用于进行t-SNE维的类,其中`n_components`参数指定了维后的维度数,`random_state`参数指定了随机种子。 在上面的代码中,我们使用t-SNE将原始数据到了二维,并使用`matplotlib`进行可视化。具体来说,我们使用`scatter`函数将每个样本在二维空间中的坐标绘制出来,并根据其标签进行了着色。最后,调用`axis('off')`函数可以去除坐标轴,使可视化结果更加美观。 ### 回答2: t-SNE维是一种常用的机器学习方法,它可以将高维数据维到二维或三维空间中进行可视化。t-SNE是指t-Distributed Stochastic Neighbor Embedding的缩写,它考虑了样本之间的相似度,并将相似的样本映射到维空间中的相邻位置。 在Python中,我们可以使用scikit-learn库的t-SNE模块来进行t-SNE维。首先,我们需要将数据准备好,确保数据格式正确并且进行了必要的预处理。然后,我们可以使用t-SNE类创建一个t-SNE对象,并使用fit_transform方法传入数据进行维计算。这个方法返回维后的数据。 接下来,我们可以使用matplotlib库来进行数据的可视化。我们首先创建一个形对象,并使用scatter方法来绘制数据点。我们可以选择不同的颜色或符号来表示不同的类别或标签。此外,我们还可以添加标题、坐标轴标签等来增加可视化的可读性和信息量。 最后,我们可以使用show方法来显示可视化结果。这样,我们就可以看到维后的数据在二维或三维空间中的分布情况。这有助于我们理解数据的结构、关系和规律,同时也方便我们进行后续的数据分析和模型构建。 总而言之,通过使用Python中的t-SNE模块和matplotlib库,我们可以方便地进行t-SNE维和可视化。这种方法可以帮助我们更好地理解和分析高维数据,同时也为我们的研究和应用提供了有用的工具和技术。 ### 回答3: t-SNE是一种流行的维方法,通常用于可视化高维数据。在Python中,有多个tsne维库可供选择,如scikit-learn和UMAP等。以下是使用scikit-learn库进行tsne维和可视化的示例代码: 首先,我们需要导入必要的库和数据集。假设我们有一个包含1000个样本的数据集X,每个样本有100个特征: ``` import numpy as np from sklearn.manifold import TSNE import matplotlib.pyplot as plt # 生成随机数据集 X = np.random.randn(1000, 100) ``` 接下来,我们使用TSNE类进行维。可以选择不同的参数设置,如维后的维度(默认为2)、学习率(控制维的速度)、和Perplexity(控制局部结构的平滑度)等。 ``` # 创建TSNE模型 tsne = TSNE(n_components=2, learning_rate=200, perplexity=30) # 使用TSNE模型进行维 X_tsne = tsne.fit_transform(X) ``` 完成维后,我们可以使用Matplotlib库将维后的数据可视化。这里我们以散点的形式展示数据的分布: ``` # 可视化维后的数据 plt.scatter(X_tsne[:, 0], X_tsne[:, 1]) plt.xlabel('Dimension 1') plt.ylabel('Dimension 2') plt.title('t-SNE Visualization') plt.show() ``` 执行以上代码后,将显示一张散点,其中X轴和Y轴分别代表维后的第一个和第二个维度。该可以帮助我们更好地理解数据的结构和聚类情况。 使用tsne维和可视化可以帮助我们更好地理解高维数据,揭示隐藏在数据背后的规律和关系。但需要注意,tsne只能提供一种可视化结果,并不能保证对所有数据都适用。在使用tsne进行维和可视化时,我们应该结合领域知识和其他统计方法综合分析数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值