2017-05-18 11 views
0

나는 조상 상태 재구성 분석에 사용 된 색상을 지정하려고하므로 다른 그래프에서 동일한 데이터를 동일한 데이터로 사용할 수 있습니다. 그러나 원숭이의 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

문제는 to.matrix(variable,sort(unique(variable)))입니다. 당신의 시드를 감안할 때, 팁에는 값 D가 없으므로 고유 한 값을 나타내는 열이있는 행렬을 구성하면 팔레트의 처음 네 색상 만 사용됩니다. 일치하지 않는 색상으로 문제를 해결해야 모든 가능한 특성 값의 벡터로 seq = 인수를 교체

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 

.

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

enter image description here

+0

감사합니다! 이것은 실제 데이터에서 문제를 해결하지 못했지만 일부 용어가 없기 때문에 발생했습니다. – SamPassmore

+0

그런 다음 'LETTERS'대신 모든 용어가 포함 된 문자 벡터를 사용하십시오. – nya