R语言系统发育树性状追踪:树标签替换与性状映射问题咨询
系统发育树标签替换与性状映射操作方案
1. 进化树数字标签替换为分类单元名称
当前读入的supertree对象的tip.label槽位存储的是1-36的数字编号,和导入表格tablename的code列一一对应,直接匹配替换即可,操作前先做一致性校验避免匹配错误:
# 校验树的所有tip编号是否都在性状表的code列中,返回TRUE再执行后续替换 all(supertree$tip.label %in% tablename$code) # 按code匹配,将tip标签替换为对应的分类单元名称 supertree$tip.label <- tablename$specimen[match(supertree$tip.label, tablename$code)] # 重新绘图验证替换结果 plot(supertree, no.margin=TRUE, edge.width=2, cex=0.7)
如果绘图出现标签重叠、显示不全,调整cex参数(字号)即可,数值越小标签字号越小。
2. 性状数据与进化树关联及后续性状映射流程
所有系统发育比较分析的核心前提:进化树的tip标签和性状表的物种标识必须完全一致,无拼写差异、无缺项,否则后续所有计算都会报错,操作流程如下:
第一步:对齐树与性状数据集
# 将性状表的行名设置为分类单元名称,匹配树的tip标签格式 rownames(tablename) <- tablename$specimen # 提取3个待分析的性状列,生成独立的性状数据集 trait_data <- tablename[, c("HFM", "WFM", "Wpp")] # 校验树和性状数据的匹配度 match_check <- geiger::name.check(supertree, trait_data)
如果match_check返回非空结果,说明存在不匹配项,按以下规则修正:
- 树中存在但性状表无对应数据的tip:执行
supertree <- ape::drop.tip(supertree, match_check$tree_not_data)删除 - 性状表存在但树中无对应tip的行:执行
trait_data <- trait_data[!rownames(trait_data) %in% match_check$data_not_tree, ]删除
第二步:常用性状映射操作
- 单连续性状渐变热图映射:适合展示单个性状沿进化支的数值渐变趋势,以HFM指标为例
# 生成性状映射热图对象 hfm_map <- phytools::contMap( supertree, setNames(trait_data$HFM, rownames(trait_data)), outline = FALSE ) # 自定义配色(蓝-灰-红对应数值从低到高) hfm_map <- phytools::setMap(hfm_map, colors = c("#2c7bb6", "#ffffbf", "#d7191c")) # 绘图展示,可自定义图例位置、字号 plot(hfm_map, legend = 0.7*max(ape::nodeHeights(supertree)), fsize = c(0.7, 0.9)) - 多性状联合映射:同时展示3个指标在各物种的数值分布
# 圆点大小对应性状值大小 phytools::dotTree(supertree, trait_data, length = 10, fsize = 0.7) - 系统发育信号检验:判断性状是否受系统发育关系影响,以HFM指标为例
结果中K>1且P<0.05说明性状存在显著的系统发育保守性。# 计算Blomberg's K值,test=TRUE输出显著性检验结果 phytools::phylosig( supertree, setNames(trait_data$HFM, rownames(trait_data)), method = "K", test = TRUE ) - 祖先性状重建:追溯性状在各进化支内部节点的祖先状态,实现跨支追踪
# 最大似然法重建HFM指标的祖先状态 hfm_anc <- phytools::fastAnc(supertree, setNames(trait_data$HFM, rownames(trait_data))) # 将祖先状态映射到进化树节点上展示 plot(hfm_map, legend = FALSE) ape::nodelabels( node = 1:supertree$Nnode + ape::Ntip(supertree), pie = hfm_anc, piecol = hfm_map$cols, cex = 0.5 )
内容的提问来源于stack exchange,提问作者René Deder
相关产品推荐
相关产品推荐

