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

如何用Python为直系同源组基因计数表绘制Upset图?

Python实现Orthofinder结果的Upset图绘制

1. 数据格式转换(生成group_memberships)

假设你的Orthofinder输出是基因计数表(结构示例如下),核心是把每个Orthogroup对应的存在基因的物种提取出来,形成Upset图所需的组-成员映射:

OrthogroupSpeciesASpeciesBSpeciesC
OG0000001210
OG0000002032
OG0000003111

执行以下代码完成转换:

import pandas as pd

# 读取Orthofinder基因计数表
df = pd.read_csv("Orthogroups.GeneCount.csv")

# 提取所有物种列(排除Orthogroup列)
species_cols = df.columns[1:]

# 生成group_memberships:键为Orthogroup,值为该组存在基因的物种列表
group_memberships = {}
for _, row in df.iterrows():
    og_id = row["Orthogroup"]
    # 筛选基因数>0的物种
    present_species = [col for col in species_cols if row[col] > 0]
    group_memberships[og_id] = present_species

如果你的输入是基因列表格式(如Orthogroups.tsv,物种列存逗号分隔的基因名),只需把判断条件改为pd.notna(row[col]) and row[col] != ""即可。

2. 计算物种总基因计数(组大小)

要在Upset图侧边显示每个物种的总基因数,单独统计:

# 基因计数表直接求和
species_total = df[species_cols].sum().to_dict()

# 基因列表格式的统计方式(拆分基因名并计数)
# species_total = {}
# for col in species_cols:
#     total = df[col].dropna().apply(lambda x: len(x.split(","))).sum()
#     species_total[col] = total

3. 绘制带组大小的Upset图

使用upsetplot库完成绘图,支持自定义组大小显示:

from upsetplot import UpSet, from_memberships
import matplotlib.pyplot as plt

# 将group_memberships转换为upsetplot兼容格式
upset_data = from_memberships(group_memberships.values(), data=pd.Series(group_memberships.keys()))

# 绘制Upset图,配置组大小和显示参数
plot = UpSet(
    upset_data,
    show_counts=True,  # 显示每个交集的Orthogroup数量
    element_size=40,
    group_sizes=species_total  # 侧边显示物种总基因数
)

# 调整布局并展示
plot.plot()
plt.tight_layout()
plt.show()

关键调整说明

  • 若之前脚本返回基因计数而非物种名称,是因为未筛选存在基因的物种,按上述代码通过row[col] > 0(或基因列表非空)提取物种名称即可解决。
  • 若需显示每个交集的总基因数(而非Orthogroup数量),可修改数据转换逻辑:
    # 计算每个Orthogroup的总基因数
    df["total_genes"] = df[species_cols].sum(axis=1)
    # 生成带基因计数的upset数据
    upset_data = from_memberships(
        group_memberships.values(),
        data=df.set_index("Orthogroup")["total_genes"]
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 00:06:25