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

Python使用Toytree基于Dataframe聚类值为系统发育树标签着色

基于Toytree匹配聚类值自定义系统发育树标签颜色

核心逻辑是通过两层映射完成ID到聚类值、聚类值到颜色的匹配,核心要求是传给tip_labels_colors的颜色列表顺序,必须和rtre.get_tip_labels()返回的末端标签顺序完全一致,否则会出现颜色错配。

具体步骤

  • 把两列的聚类数据整理为「末端ID-聚类值」的查询字典,避免逐行遍历Dataframe匹配的低效率问题。
  • 建立「聚类值-颜色」的映射表,可手动指定固定配色,也可通过调色板自动生成离散配色。
  • 严格按照树对象返回的末端标签顺序,逐个查询对应颜色,生成顺序完全对齐的颜色列表。
  • 将颜色列表传入绘图参数即可。

完整实现代码

适配自有数据的代码

import toytree
import pandas as pd
import numpy as np

# 1. 加载聚类数据,替换为你的文件路径,分隔符按实际文件调整(空格分隔用sep="\s+",制表符用sep="\t")
df = pd.read_csv(
    "你的聚类文件路径",
    sep="\s+",
    header=None,
    names=["tip_id", "cluster"]
)
tip_cluster_map = dict(zip(df["tip_id"], df["cluster"]))

# 2. 配置聚类对应颜色
# 方式一:手动指定,适合聚类数量少的场景
cluster_color_map = {
    1: "#ff0000",  # 聚类1对应红色
    2: "#00ff00",  # 聚类2对应绿色
    7: "#5384a3",
    20: "#d6557c"
    # 补全你所有聚类值对应的颜色即可
}

# 方式二:聚类数量多时自动生成配色,无需手动枚举
# unique_clusters = df["cluster"].unique()
# palette = toyplot.color.brewer.palette("Set2", count=len(unique_clusters))
# cluster_color_map = dict(zip(unique_clusters, palette))

# 3. 加载树文件,按你的需求设置外类群/根节点
rtre = toytree.tree("你的树文件路径").root(wildcard="你的根节点匹配关键词")

# 4. 按树的末端标签顺序生成颜色列表(核心,顺序不能乱)
colorlist = [cluster_color_map[tip_cluster_map[tip]] for tip in rtre.get_tip_labels()]

# 5. 绘图
rtre.draw(
    tip_labels_align=True,
    tip_labels_colors=colorlist
)

可直接运行的验证示例(基于公开测试树)

如果要先验证逻辑,可以运行以下测试代码,模拟聚类数据完成配色:

import toytree
import toyplot
import pandas as pd
import numpy as np

# 加载测试树
url = "https://eaton-lab.org/data/Cyathophora.tre"
rtre = toytree.tree(url).root(wildcard='prz')

# 模拟和你格式一致的聚类Dataframe,给每个末端随机分配3个聚类值
df = pd.DataFrame({
    "tip_id": rtre.get_tip_labels(),
    "cluster": np.random.choice([1,2,3], size=len(rtre.get_tip_labels()))
})
tip_cluster_map = dict(zip(df["tip_id"], df["cluster"]))

# 配置聚类颜色
cluster_color_map = {1: "#ff0000", 2: "#00ff00", 3: "#0000ff"}

# 生成顺序对齐的颜色列表
colorlist = [cluster_color_map[tip_cluster_map[tip]] for tip in rtre.get_tip_labels()]

# 出图
rtre.draw(
    tip_labels_align=True,
    tip_labels_colors=colorlist
)

常见报错排查

  • 出现KeyError:先检查树文件的末端ID和Dataframe里的ID是否完全一致,有没有多余空格、后缀缺失、大小写不匹配的问题。
  • 颜色和聚类对应错位:确认生成colorlist时是直接遍历rtre.get_tip_labels()的返回值,没有单独对ID列表做排序、去重等打乱顺序的操作。
  • 颜色显示异常:检查传入的颜色值是否为合法的十六进制色值,或toyplot支持的颜色对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:45:48