如何移除rotl系统发育树图中物种名末尾的ott编号?
移除rotl绘制系统发育树中的OTT编号
rotl包生成的系统发育树默认会在物种名称后附加OTT编号,要去掉这些编号可以通过修改树的tip.label实现,以下两种方法都可行:
方法一:正则表达式直接替换
利用正则匹配并移除标签末尾的OTT编号部分,代码修改如下:
taxa <- tnrs_match_names(bodysize_dat$Species) tree <- tol_induced_subtree(ott_ids = ott_id(taxa)) # 移除标签中的OTT编号 tree$tip.label <- gsub(" ott\\d+$", "", tree$tip.label) # 注意:原代码中no.margine拼写错误,修正为no.margin plot(tree, cex = 0.8, label.offset = .1, no.margin = TRUE)
解释:gsub(" ott\\d+$", "", tree$tip.label) 会精准匹配标签末尾的 ott+数字组合,将其替换为空字符串,快速清除OTT编号。
方法二:利用匹配结果的对应关系替换
通过tnrs_match_names返回的匹配结果,建立物种名与带OTT编号标签的对应关系,替换更稳妥:
taxa <- tnrs_match_names(bodysize_dat$Species) tree <- tol_induced_subtree(ott_ids = ott_id(taxa)) # 构建OTT编号标签与干净物种名的映射表 name_map <- setNames(taxa$matched_name, paste0(taxa$matched_name, " ott", ott_id(taxa))) # 替换树的标签 tree$tip.label <- name_map[tree$tip.label] # 绘图 plot(tree, cex = 0.8, label.offset = .1, no.margin = TRUE)
解释:这种方法基于匹配时的原始对应关系,避免正则表达式可能出现的特殊情况,适合物种名称格式复杂的场景。
内容的提问来源于stack exchange,提问作者Rach B.
相关产品推荐
相关产品推荐

