在系统发育祖先状态重建中指定颜色

时间:2017-05-18 12:36:34

标签: r phylogeny ape-phylo

我正在尝试指定我的祖先状态重建分析中使用的颜色,以便我可以在其他图形中使用相同的颜色相同的数据。但是,当我使用来自猿的nodelabels时,我指定的颜色与显示的内容不对齐。有人知道为什么吗?以及如何解决它?请参阅下面的问题示例:

rm(list = ls())

library(phytools)
library(ape)
library(RColorBrewer)

set.seed(1237)

tree = rtree(50)

plot(tree)

variable = rTraitDisc(tree, k = 5)
names(variable) = tree$tip.label

cols = data.frame(type = levels(variable),
                    color = I(brewer.pal(nlevels(variable), name = 'Set1')))
cols_vector = cols$color
names(cols_vector) = cols$type

fit = ace(x = variable, phy = tree, type = 'discrete')

nodelabels(node=1:tree$Nnode+Ntip(tree),
           pie=fit$lik.anc, piecol=cols_vector)
tiplabels(pie=to.matrix(variable,sort(unique(variable))),piecol=cols_vector)
tiplabels(text = variable)

给出了图像:

enter image description here

大多数颜色排列正常,但E显示为紫色,但代码为#FF7F00(橙色)。这段代码就是一个例子:

t = table(variable)
barplot(t, col = cols_vector[match(names(t), names(cols_vector))])

enter image description here

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:1)

问题出在命令to.matrix(variable,sort(unique(variable)))中。给定种子,没有提示具有值D,因此如果构造具有表示唯一值的列的矩阵,则仅使用调色板中的前四种颜色。

head(to.matrix(variable,sort(unique(variable))))
    A B C E
t47 1 0 0 0
t14 1 0 0 0
t2  1 0 0 0
t19 1 0 0 0
t29 1 0 0 0
t5  1 0 0 0

用所有可能的特征值的向量替换seq =参数应解决不匹配颜色的问题。

tiplabels(pie = to.matrix(x = variable, seq = LETTERS[1:5]), piecol = cols_vector)

enter image description here