玩转单细胞(21):复现Nature图表---单细胞亚群无监督层次聚类分析及环形树状图绘制

玩转单细胞往期精彩系列: 玩转单细胞(1)---提取特定基因表达的细胞群分析(一个小问题)****玩转单细胞(2):Seurat批量做图修饰****玩转单细胞(3):堆叠柱状图添加比例 玩转单细胞(4):单细胞相关性 玩转单细胞(5):单细胞UMAP图只标记特定细胞群、圈定细胞群及坐标轴修改 玩转单细胞(6):单细胞差异基因展示之对角散点图 玩转单细胞(7):修改Seurat对象基因名称 玩转单细胞(8): 单细胞3维聚类图展示 玩转单细胞(9):单细胞Seurat对象数据操作****玩转单细胞(10):替换单细胞Seurat对象UMAP坐标 玩转单细胞(11):Seurat单细胞基因表达DotPlot图分面设置 玩转单细胞(12):单细胞celltype颜色、顺序设置及V5小问题****玩转单细胞(13):Seurat V5单细胞基本可视化 玩转单细胞(14): 单细胞分亚群之后分群信息返回原来的seurat对象****玩转单细胞(15):一些简便的作图、数据运行处理小技巧

玩转单细胞(16):Scanpy单细胞h5ad数据转化为Seurat对象

玩转单细胞(17):差异基因分析可以舍弃一些没必要的基因-例如MT..RPL..

玩转单细胞(18):UMAP图修饰之同时展示亚群/cluster与总的细胞群****玩转单细胞(19):单细胞Seurat分析基本可视化实现python版Scanpy风格****玩转单细胞(20)---scanpy单细胞分析一些数据操作问题(对标seurat)这里我们要学习和复现的是一篇nature文章的图表Fig 1d,这篇文章全部数据都来自公共数据库。文章提供了处理好的单细胞数据以及代码,很好的学习资源。感兴趣的可以好好的看一看。


(reference:https://www.nature.com/articles/s41586-025-09053-4
加载数据:


import scanpy as sc
adata = sc.read_h5ad('./igt_s9_fine_counts.h5ad')
adata
# AnnData object with n_obs × n_vars = 2293951 × 21812
# obs: 'cohortID', 'cohortName', 'datasetID', 'donorID', 'sampleID', 'system', 'tissue', 'region', 'sampleType', 'cellSort', 'libraryType', 'platform', 'compartment', 'cellType1', 'cellType2', 'sex', 'age', 'doublet_score', 'predicted_doublet', 'n_genes_by_counts', 'total_counts', 'total_counts_mt', 'pct_counts_mt', 'total_counts_HSP', 'pct_counts_HSP', 'S_score', 'G2M_score', 'phase', 'ann1', 'ann2', 'ann3', 'majorCluster', 'subCluster'
# var: 'mt', 'HSP', 'n_cells_by_counts', 'mean_counts', 'pct_dropout_by_counts', 'total_counts', 'exclude', 'excludeType'
# uns: 'log1p'
# obsm: 'X_umap'
sc.pl.umap(adata,color='majorCluster')
image.png

计算平均表达量矩阵:这里是anndata,在python中计算好之后使用R分析作图。如果您的单细胞数据是seurat,那么使用Averageexpress函数计算平均表达量矩阵。


#获取细胞基因表达矩阵
genes = adata.var_names.tolist()
genedf = sc.get.obs_df(adata, keys=["subCluster", *genes])
genedf.head()


#average expressed matrix,平均表达量矩阵
grouped = genedf.groupby("subCluster", observed=True)
df_mean, var = grouped.mean(), grouped.var()
#保存数据
df_mean.to_csv('./df_mean.csv')

添加颜色:原文是有设置好的颜色文件,没有找到,可以按照自己需求设置。

prefixes <- substr(rownames(ave_exp), 1, 1)
#映射颜色
cell_color <- c(
  "B" = '#fc8d59',
  "S" = '#9e9ac8',
  "M" = '#96daf7',
  "C" = '#fed976',
  "E" = '#b0479a',
  "I" = '#35978f'
)
cell_colors <- cell_color[prefixes]
cell_colors[is.na(cell_colors)] <- "gray"  # 默认颜色
cell_colors <- as.data.frame(cell_colors)
cell_colors$celltypes <- rownames(ave_exp)
rownames(cell_colors) <- rownames(ave_exp)
cell_colors <- cell_colors[rownames(ave_exp)[order.dendrogram(hc)],]
labels_colors(hc) <- cell_colors$cell_colors
#plot环形聚类树图,保存为pdf,设置长宽
pdf("cluster_tree_circle.pdf", width = 6, height = 6)
circlize_dendrogram(hc,
                    labels_track_height = 0.6,#标签(labels)所在圆环的高度
                    dend_track_height = 0.2)#聚类树高度
dev.off()

image.png

其实关于单细胞聚类树我们之前介绍过(复现Nature图表:学习nature代码之聚类树+基因表达气泡图),之前使用的是ggplot2,如果类似这篇文章这样,celltype很多,可以考虑环形的聚类树图。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。