【问题标题】:In R, how to order a vector of data according to both tips and edges of a phylogenetic tree?在 R 中,如何根据系统发育树的尖端和边缘对数据向量进行排序?
【发布时间】:2014-02-28 16:39:47
【问题描述】:

我想根据为该树的每个分支估计的一些值绘制具有颜色的系统发育树。根据plot.phylo和phytools的各种功能,可以:plot.phylo(tree,edge.color=col),但是向量col必须遵循tree$edge的顺序。

问题是:我的数据同时包含边缘和尖端,是否可以在一致的调色板中绘制两者?

简短示例:

test.mod:
((a:1,b:1)a-b:1,(c:1,d:1)c-d:1)a-d;

test.data:
a 0.5
b 0.6
a-b 1
c 2.5
d 2
c-d 2.1
a-d 1.5

提前致谢, 泽维尔

【问题讨论】:

    标签: r colors tree phylogeny


    【解决方案1】:

    这取决于您要达到的目标。有些方法可以很容易地实现自动化(例如我的第二个示例)。

    恕我直言,如果您想根据分类或类似情况为每个分支赋予不同的颜色,则必须手动为树着色,例如:

    library("ape")
    tree <- read.tree("tree.mod")
    
    tree$edge
    #     [,1] [,2]
    #[1,]    5    6 # root -> a:b
    #[2,]    6    1 # == "a"
    #[3,]    6    2 # == "b"
    #[4,]    5    7 # root -> c:d
    #[5,]    7    3 # == "c"
    #[6,]    7    4 # == "d"
    
    cols <- rep(c("red", "green"), each=3)
    plot.phylo(tree, edge.col=cols)
    

    一个可以自动完成的简单示例是为最后一片叶子着色,例如:

    ntips <- length(tree$tip.label)
    cols <- c(rainbow(ntips), rep("black", nrow(tree$edge)-ntips+1))
    plot.phylo(tree, edge.col=cols[tree$edge[,2]])
    

    编辑:在匹配标签之前,您必须按tree$edge[,2] 对标签进行排序。请在下面找到一个示例:

    library("ape")
    tree <- read.tree("tree.mod")
    
    myColors <- c(node="black", a="red", b="green", c="blue", d="purple")
    myLabels <- c(tree$tip.label, tree$node.label)
    
    ## match colors and labels (nomatch == node => select idx 1)
    ## (myLabels are reordered by edge ordering
    selColors <- myColors[match(myLabels[tree$edge[,2]], names(myColors), nomatch=1)]
    
    plot.phylo(tree, edge.col=selColors)
    

    【讨论】:

    • 感谢您的详细示例,根据您的代码,我对您给出的第二种情况感兴趣: cols
    • @XavierPrudent:没错,因为tree$edge 矩阵中的最低值是提示(在本例中:1:4 == a,b,c,d),较高的值是节点(分支的交叉点)。
    • 谢谢,我使用'match'函数订购了我的数据:f=read.table("test.data") val=as.vector(f$V2) names(val)=f$ V1 myLabels=c(tree$tip.label,tree$node.label) sortedVal = val[match(myLabels,names(val))],但是树上显示的颜色仍然与输入数据不匹配。我一定搞砸了订购。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2014-10-06
    相关资源
    最近更新 更多