【问题标题】:Specifying colours in phylogenetic ancestral state reconstruction在系统发育祖先状态重建中指定颜色
【发布时间】:2023-03-18 14:17:01
【问题描述】:

我正在尝试指定在我的祖先状态重建分析中使用的颜色,以便我可以在其他图表中使用相同的颜色相同的数据。但是,当我从 ape 中使用 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)

这给出了图像:

大多数颜色都可以排列,但 E 显示为紫色,但代码为 #FF7F00(橙色)。以这段代码为例:

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

任何建议将不胜感激。

【问题讨论】:

    标签: r phylogeny ape-phylo


    【解决方案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)
    

    【讨论】:

    • 谢谢!这并没有完全解决我的实际数据中的问题,但这是由于某些术语不存在。
    • 然后使用包含所有术语的字符向量代替LETTERS
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-04
    相关资源
    最近更新 更多