单细胞分析tipsscanpy

单细胞差异基因可视化|Seurat和scanpy提取细胞簇主要差

2022-08-31  本文已影响0人  纷纷不可诉

1.背景

单细胞数据分析在进行完细胞自聚类或者细胞类型注释后,一般需要对查到的差异基因可视化,用来显示基因和细胞群的相关性,进行后续分析。当然Seurat和scanpy本身可视化的方式有非常多,例如feature plot, violin plot, dot plot等,但是问题在于差异基因分析后,如何快速将每个细胞簇所对应的top deg汇总,然后再对接函数绘制成图像。
Seurat的操作比较简单,因为FindMarker()后自身生成的就是一个数据框,但scanpy的sc.tl.rank_genes_groups()就没有那么用户友好了。

2.Seurat的实现

library(Seurat)
library(ggplot2)
library(dplyr)

deg<-FindAllMarker(data) #首先差异基因分析获取每个细胞簇的deg
top5 <- deg %>% group_by(cluster) %>% slice_max(order_by = avg_log2FC,n = 5) #提取top差异基因,这里n=5代表top5

mark <- unique(top5$gene) #当然,这里可以是自己选的markers,来自背景知识的细胞标志物
p=DotPlot(kc,features = marker)
p

# 上面已经绘制完成了,下面这步只是纯粹地气泡图美化(可选)
p+ggtitle('there is the title')+theme(axis.text.x = element_text(angle = 45, hjust = 1,size = 10),#x轴标识
                                      axis.text.y = element_text(size = 10),#y轴标识
                                      legend.text = element_text(size= 10),legend.title= element_text(size= 10),#设置legend
                                      plot.title = element_text(hjust = 0.5,size = 12))+#设置标题居中
                                scale_colour_gradientn(colours = viridis::viridis(20))#修改成为CNS配色

基本的流程是非常简单的:差异基因分析——分组提取top DEG——可视化
至于需要其他可视化方式也是一样的,只需要在可视化这步进行微调即可。

3.scanpy的实现

这一部分是我写这篇简书的主要目的,主要是因为我自己在分析的时候刚好需要,但是scanpy又不大熟悉,而且scanpy确实远不如Seurat用户友好,好多函数的结果都直接存放在adata本身里面,提取比较麻烦。而且python主要都是pandas的操作,所以数据处理的随意性还不如R。

import scanpy as sc
import pandas as pd
import numpy as np

# find all degs
sc.tl.rank_genes_groups(adata, groupby='leiden', method='t-test')
celltype=adata.obs['leiden'].unique().tolist() #把所有细胞簇种类拿出来
deg=sc.get.rank_genes_groups_df(adata,group=celltype) #把所有细胞簇对应的deg拿出来
deg.to_csv('./spGCN_deg.CSV') #存储备份

top=deg.groupby('group') 
top5=[] #同样以top5举例
for i in range(len(celltype)): #分群提取top5
    tmp=top.get_group(str(i))
    tmp=tmp.sort_values('scores',ascending=False) #按scores排序
    top5.append(tmp['names'].head(5).tolist())
#array list 转为 list
top5=np.array(top5)
top5=np.reshape(top5,5*len(celltype),'C').tolist() 

# visualization
sc.pl.dotplot(adata, top5, groupby='leiden')
plt.savefig('./top5_dotplot.png')

其实思路是一样的,就是python/scanpy的提取top deg这步弯弯绕绕的,比较麻烦。而且实际的运行过程中,也发现scanpy的差异基因分析方法其实不如Seurat,找出来的DEG大多特异性不高,就比较奇怪,这点需要留意。


示例图
上一篇 下一篇

猜你喜欢

热点阅读