美文网首页单细胞分析tipsscanpy
单细胞差异基因可视化|Seurat和scanpy提取细胞簇主要差

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

作者: 纷纷不可诉 | 来源:发表于2022-08-31 19:15 被阅读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大多特异性不高,就比较奇怪,这点需要留意。


    示例图

    相关文章

      网友评论

        本文标题:单细胞差异基因可视化|Seurat和scanpy提取细胞簇主要差

        本文链接:https://www.haomeiwen.com/subject/wnidnrtx.html