You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Scanpy/Python绘制分组的Leiden簇细胞占比堆叠柱状图?

实现两组样本Leiden簇占比堆叠柱状图的方法

前提说明

假设你的DataFrame结构如下(列名可根据实际情况调整):

groupleidenpercentage
Average035.2
Average128.7
Average236.1
High022.5
High145.3
High232.2

代码实现步骤

1. 导入所需库

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

2. 整理数据为宽格式

将长格式的DataFrame转换为宽格式,方便直接绘制堆叠柱状图:

# 假设你的DataFrame名为df
wide_df = df.pivot(index='group', columns='leiden', values='percentage').fillna(0)

3. 绘制堆叠柱状图

# 设置绘图风格(可选,优化视觉效果)
sns.set_style("whitegrid")

# 创建画布和轴对象
fig, ax = plt.subplots(figsize=(8, 6))

# 绘制堆叠柱状图
wide_df.plot(kind='bar', stacked=True, ax=ax, colormap='tab20')

# 调整图表样式
ax.set_title('Leiden簇细胞占比分布', fontsize=14)
ax.set_xlabel('样本组', fontsize=12)
ax.set_ylabel('细胞占比 (%)', fontsize=12)
# 取消x轴标签旋转,提升可读性
ax.set_xticklabels(wide_df.index, rotation=0)
# 将图例移至图表右侧,避免遮挡
ax.legend(title='Leiden簇', bbox_to_anchor=(1.05, 1), loc='upper left')

# 可选:在每个堆叠块上显示百分比数值
for p in ax.patches:
    width, height = p.get_width(), p.get_height()
    x, y = p.get_xy()
    if height > 0:
        ax.text(x + width/2, y + height/2, f'{height:.1f}%', ha='center', va='center')

plt.tight_layout()
plt.show()

关键参数与自定义建议

  • stacked=True:开启堆叠模式,将同一组内的不同簇占比堆叠展示
  • colormap='tab20':适合区分多簇的调色板,簇数量少时可改用tab10;也可通过color参数手动指定颜色列表
  • 若Leiden列存储的是细胞类型名称,直接替换代码中的leiden为对应列名即可
  • 调整figsize参数可修改图表宽高比例,适配不同展示场景

内容的提问来源于stack exchange,提问作者Quentin Chartreux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:04:55