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

如何用plot.phylo按数据框属信息着色进化树标签并加图例

解决进化树节点标签按病毒属着色的问题

核心思路

要让节点颜色对应属分类,关键是把进化树的节点名称和数据框的Genus列精准匹配,再根据属分配颜色,而非直接按数据框顺序赋值。

具体实现步骤

假设你已拥有:

  • 比对完成的序列对象(示例中用msa_result指代)
  • 包含病毒名称(需与进化树节点名完全一致)、Genus列的数据框virus_df

1. 生成进化树对象

先完成基础的进化树构建(以NJ树为例):

library(msa)
library(Biostrings)
library(ape)

# 将比对结果转换为ape可处理的格式
dna_aln <- msaConvert(msa_result, type="ape::DNAbin")
# 构建NJ进化树
tree <- nj(dist.dna(dna_aln))

2. 匹配节点名称与属信息

确保进化树节点名和数据框中的病毒名称完全匹配,再创建颜色映射:

# 按进化树节点顺序,匹配对应病毒的属信息
tip_genus <- virus_df$Genus[match(tree$tip.label, virus_df$病毒名称列)]

# 给每个属分配唯一颜色(可自定义配色)
unique_genera <- unique(tip_genus)
# 用RColorBrewer生成配色,也可手动指定颜色向量
genus_colors <- setNames(RColorBrewer::brewer.pal(length(unique_genera), "Set1"), unique_genera)

# 生成对应每个节点的颜色向量
tip_colors <- genus_colors[tip_genus]

3. 绘制带着色标签的进化树并添加图例

# 绘制进化树,设置节点标签颜色
plot(tree, tip.color=tip_colors, cex=0.8, main="病毒进化树(按属着色)")

# 添加图例,位置可根据树布局调整(如"topright""bottomleft")
legend("topright", legend=unique_genera, fill=genus_colors, cex=0.7, title="病毒属")

关键注意事项

  • 进化树的tip.label必须和数据框中的病毒名称完全一致(包括大小写、空格、后缀),否则会出现NA值导致颜色匹配失败。
  • 若属的数量超过所选配色方案的颜色数,可换用rainbow()生成配色,或手动定义颜色向量。
  • 若使用环形等特殊树布局(如type="fan"),需调整图例位置到合适区域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 02:03:18