虽然scanpy有展示marker基因的热图函数(scanpy单细胞转录组python教程(五):最详尽的基础可视化解析),但是有很明显的缺陷,就是不能label特定基因。为了解决这个问题,我们写了一个通用函数,input是dataframe,不仅可以展示单细胞marker基因平均表达量热图,其他的数据矩阵都可以使用。

640.png
此外,对于整体cell的热图也可以标注基因,这里是参考了一篇NC文章:

640.png
首先看看函数参数:

640.png
获取marker基因(也可以手动整理):
import scanpy as sc
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import matplotlib.colors as mcolors
#挑选需要plot的基因,读入数据
df_markers = pd.read_csv('./adata_markers.csv')
df_markers
这是scanpy自带函数的plot:
sc.pl.matrixplot(
adata,
df_markers['names'],
"celltype",
colorbar_title="mean z-score",#legend标题设置
#layer="log1p_norm",#layer
#categories_order=['Ciliated', 'UnCiliated','Endo','Stromal', 'Myeloid', 'T cell', 'NKT','B cell','Mast'],#自定义顺序
vmin=-2,
vmax=2,
cmap="RdBu_r",
swap_axes=False
)

640.png
获取average expressed matrix:
#get gene express data
#scaleed data
#you can set parameter layers
obs_tidy = sc.get.obs_df(adata,keys = df_markers['names'].tolist())
obs_tidy.head()
#keys添加obs,例如celltype或者leiden,就可以在表达矩阵第一列出现注释
genedf = sc.get.obs_df(adata, keys=["celltype", *df_markers['names'].tolist()])
genedf
#average expressed matrix
grouped = genedf.groupby("celltype", observed=True)
mean, var = grouped.mean(), grouped.var()
df = mean.T
df
plot(label的基因及其颜色):
color_dict = {
#B cell
"IGHD" :"#fc8d59",
"CD79A" : "#fc8d59",
"CD19":"#fc8d59",
"IGHM":"#fc8d59",
#Ciliated
"CFAP52":"#9e9ac8",
"DNAH5":"#9e9ac8",
"FOXJ1":"#9e9ac8",
#Endo
"ACKR1":"#96daf7",
"HOXD1":"#96daf7",
"VWF":"#96daf7",
"EDN1":"#96daf7",
"PECAM1":"#96daf7",
#Mast
"TPSAB1":"#fed976",
"TPSB2":"#fed976",
"CPA3":"#fed976",
"MS4A2":"#fed976",
"KIT":"#fed976",
#Myeloid
"FCGR1B":"#b0479a",
"TREM2":"#b0479a",
"CD1E":"#b0479a",
#NKT
"KRT81":"#35978f",
"KLRC1":"#35978f",
"GNLY":"#35978f",
"ITGAD":"#35978f",
"NKG7":"#35978f",
#Stromal
"COL1A1":"#e31a1c",
"COL3A1":"#e31a1c",
"IGF1":"#e31a1c",
"TAS2R1":"#e31a1c",
#T cell
"CD3G":"#f6a2a7",
"CD3D":"#f6a2a7",
"FOXP3":"#f6a2a7",
"CCR4":"#f6a2a7",
#UnCiliated
"ASRGL1":"#f9d3d7",
"KRT8":"#f9d3d7",
"KRT18":"#f9d3d7",
"TMEM210":"#f9d3d7"
}
sc_markerAvgExp_heatmap(df,label=True,label_genes=color_dict,z_score=0)

640.png