我试图绘制一棵系统发育树,并使枝条的颜色与该物种的连续特性相对应。我使用R中的phytools软件包中的函数plotBranchbyTrait来做这件事,但是指示每个物种的性状程度(在我的情况下,食物中沉淀物的数量)的颜色强度并不都与我的数据一致。plotBranchbyTrait实际上是用性状的值来表示颜色,还是用特征值的反比来表示颜色,因为绘制的颜色强度似乎表明了这一点。如果有任何其他建议,我们将不胜感激。
下面是我的代码示例:
birdtree <- read.nexus("output.nex") # my pruned phylogeny tree downloaded from BirdTree.org
rootedtree <- maxCladeCred(birdtree,tree = TRUE, rooted = TRUE) # here you root the tree
diet_averages <- read.csv("species diet averages.csv",header=TRUE, na.strings=c("", "n/a")) # my data showing percent of seed in diet
str(diet_averages)
data.frame': 123 obs. of 2 variables:
$ binomial: chr "Accipiter_cooperii" "Accipiter_gentilis" "Accipiter_melanoleucus" "Acridotheres_tristis" ...
$ seeds : num 0 0 0 17.6 0 0 0 38.4 0 0 ...
plotBranchbyTrait(rootedtree, mydata$seeds, palette = "rainbow")
发布于 2022-09-01 23:21:58
我也有同样的问题。“plotBranchbyTrait”有一个有问题的映射例程,它在映射所有边缘和提示时将节点和边缘混合在一起。
这是一个解决办法,它忽略了边缘数据(用‘plotBranchbyTrait’创建新的边缘值):
MapData<-mydata$seeds
MapData<-MapData[1:length(rootedtree$tip.label)] # assuming that the rows 1:x correspond to the taxa in the tree
names(MapData)<-rootedtree$tip.label
plotBranchbyTrait(rootedtree, MapData, palette = "rainbow", mode="tips")经过大量的研究,我也找到了问题的根源。在映射完整的数据集(包括边缘数据)时,“plotBranchbyTrait”根据"rootedtree$ edge“在内部重新排序输入向量。您可以搜索该树,以确定从您的关系树派生的每个物种列表I的相应节点/提示:
PhyloNode[i]<-findMRCA(rootedtree, tips=Specieslist[i], type="node")并导出矩阵rootedtree$edge中的哪一行将此节点/提示作为后代:
EdgeRow[i]<-which(rootedtree$edge[,2]==PhyloNode[i])请注意,需要从这个引用表中排除i=1,因为在phylo树中不存在Nexus根。一旦确定了每个节点的边缘,就可以重新排序数据。
MapData<-mydata$seeds
names(MapData)<-EdgeRow
MapData<-MapData[order(ParentRow)]
plotBranchbyTrait(rootedtree, MapData, palette = "rainbow", mode="edges")https://stackoverflow.com/questions/71757763
复制相似问题