在R中基于NHX文件的fl标签设置进化树分支颜色
在R中基于NHX文件的fl标签设置进化树分支颜色
嗨,我来帮你搞定这个问题~ 你当前的代码有两个核心问题:一是没正确解析NHX文件里的注释字段,二是没把fl标签和分支颜色做绑定,我给你调整下:
首先,你用read.tree()读NHX格式的树是行不通的——这个函数只能识别树的拓扑结构和分支长度,会直接忽略NHX里的fl、ND这类注释信息。得换成treeio包里的read.nhx(),这样才能把这些注释字段提取出来存在树对象里,后续才能用它们做可视化映射。
然后,要实现分支按fl标签上色,只需要在ggtree()的美学映射里加上color = fl就行。不过要注意,不是所有分支都有fl标签(比如你的示例里只有叶子对应的分支带fl=leaf),所以可以用scale_color_manual()自定义颜色,给有fl标签的分支指定颜色,没标签的分支用默认色。
修正后的完整代码如下:
library(ggtree) library(treeio) # 用read.nhx解析NHX格式的树,保留注释信息 tree <- read.nhx("((leaf:0.2[&&NHX:fl=leaf]):0.05[&&NHX:ND=N1]):0.0[&&NHX:ND=N2];") ggtree(tree, aes(color = fl)) + # 核心:将fl标签与分支颜色绑定 geom_label(aes(label=ND)) + geom_tiplab(geom="label", align = TRUE)+ geom_text(aes(x=branch, label=fl), fontface=3, vjust=-.5)+ xlim_tree(0.17)+ # 自定义颜色:fl=leaf的分支用红色,无fl标签的分支用黑色(可按需修改) scale_color_manual(values = c("leaf" = "red"), na.value = "black") + theme_tree2(legend.position="none")
我再给你划几个重点:
read.nhx():这是能用到NHX注释的前提,一定要替换掉read.tree()ggtree(tree, aes(color = fl)):这行是分支上色的核心,把fl字段映射到分支颜色属性scale_color_manual():如果需要特定颜色就用这个函数,na.value是给没有fl标签的分支设置默认色,你可以把红色换成你想要的任何颜色,比如"blue"、"green"都可以
备注:内容来源于stack exchange,提问作者teddy
相关产品推荐
相关产品推荐

