🖌️scRNAseq可视化

By Kaiyi

Python Matplotlib系统教程

样本构成分布

单层空心饼图

// Python

#https://huarc.net/notebook/scatlasvae/analysis_final.html

pie_plot(adata_nogex, 
         items=disease_types, 
         item_str='disease_type', 
         item_color=disease_type_color,
         file_name='figures/S7_condition_percent.pdf')

双层空心饼图

// Python
#https://huarc.net/notebook/scatlasvae/analysis_final.html

# 创建一个空列表,用于存储每个组织类型内细胞亚型的数量
tissue_subpercent = []

# 遍历聚合后的组织类型 meta_tissue_type_aggrs
for j in meta_tissue_type_aggrs:
    # 对每个组织类型 (j),计算每个细胞类型 (i) 中的细胞数量
    cell_num = [len(adata_nmal.obs[(adata_nmal.obs['meta_tissue_type_aggr'] == j) & 
                                   (adata_nmal.obs['meta_tissue_type'] == i)]) for i in meta_tissue_types]
    # 将计算结果 (每个组织类型下细胞类型的数量) 添加到 tissue_subpercent 列表中
    tissue_subpercent.append(cell_num)

# 将 tissue_subpercent 转换为 NumPy 数组,以便后续操作
tissue_subpercent = np.array(tissue_subpercent)

# 创建一个新的图形和子图,设置图形大小
fig, ax = plt.subplots(figsize=(10, 8))

# 获取外圈饼图的颜色映射
color_map = meta_tissue_type_color.values()

# 获取内圈饼图的颜色映射
inner_color_map = tissue_type_color.values()

# 绘制外圈饼图
ax.pie(tissue_subpercent.sum(axis=1), radius=1,  # 使用 sum(axis=1) 来获取每个组织类型的总细胞数
       colors=color_map,  # 外圈颜色
       autopct='%1.0f%%',  # 百分比格式
       pctdistance=1.2,  # 百分比距离图心的距离
       wedgeprops=dict(width=0.3))  # 设置外圈的宽度

# 绘制内圈饼图,只绘制非零的细胞数量,表示细胞亚型的分布
ax.pie(tissue_subpercent.flatten()[tissue_subpercent.flatten() != 0], radius=0.7,  # 使用半径为 0.7 绘制内圈
       colors=inner_color_map,  # 内圈颜色
       autopct='%1.2f%%',  # 百分比格式,保留两位小数
       pctdistance=1.2,  # 百分比距离图心的距离
       wedgeprops=dict(width=0.3, alpha=0.8))  # 设置内圈的宽度和透明度

# 添加图例,显示外圈和内圈的组织类型和细胞类型
ax.legend(list(meta_tissue_type_color.keys()) + list(tissue_type_color.keys()),  # 外圈和内圈的标签合并
          title="Meta Tissue Types",  # 图例标题
          loc="center left",  # 图例位置
          fontsize="small",  # 图例字体大小
          bbox_to_anchor=(1, 0, 0.5, 1))  # 调整图例位置

# 保存图形为 PDF 文件
fig.savefig('figures/tissue_subpercent.pdf')

# 显示图形
plt.show()

堆叠柱状图

// Python

stacked_bar(adata=adata_circ_nokid[adata_circ_nokid.obs['meta_cell_subset']=='normal_CD8'], 
            percentage=True, xitems=disease_types, xitem_str='disease_type', 
            yitems=cell_subtype_aggrs, yitem_str='meta_cell_subtype', yitem_color=main_type_color, 
            file_name='figures/S7_disease2subtypes_circ.pdf')

Last updated