2016-09-30 34 views
0

我正在嘗試使用定義的方法here來構建一個自引導樹。因爲我有一個巨大的數據集,所以繪製每個人的名字(爲了這個例子而命名爲1,2,3,4 ...)並不是信息性的。因此,我希望將這些提示着色以反映個人的物種。個別品種的信息存儲在一個分離矩陣稱爲種類:爲個體物種的系統發育樹的提示着色

species = data.frame(Ind=c(1 ,2 ,3 ,4 ,5), 
        Spe=c("s1","se1","se2","se2","se3")) 

然而,每當我試圖與它的配合$樹$標籤種類來代替個人的名字,唯一的結果是先發制人的載體。可能這是因爲契合是類pml的一個對象,而這與我的策略產生衝突,但我不確定。有沒有一種方法可以根據單個物種爲樹的顏色着色?我的代碼看起來是這樣的,現在:

library(phangorn) 
#Create a tree from data in fasta format 
dat = read.phyDat(file = "myalignment.fasta", format ="fasta") 
tree <- pratchet(dat)   # parsimony tree 
mt <- modelTest(dat, tree=tree, multicore=TRUE) 
mt[order(mt$AICc),] 
bestmodel <- mt$Model[which.min(mt$AICc)] 
env = attr(mt, "env") 
fitStart = eval(get("GTR+G+I", env), env) 
fit = optim.pml(fitStart, rearrangement = "stochastic", optGamma=TRUE, optInv=TRUE, model="GTR") 
bs = bootstrap.pml(fit, bs=100, optNni=TRUE, multicore=TRUE) 

#Replace the names with the species... 
fit$tree$tip.label <- species[which(species[,1] == fit$tree$tip.label),2] 
#If I print fit$tree$tip.label here, the output is factor(0) 

#...and create the tree with colored tips 
plotBS(midpoint(fit$tree), bs, p = 50, type="p", show.tip.label = FALSE) 
tiplabels(pch=19, col = as.factor(fit$tree$tip.label), adj = 2.5, cex = 2) 

重複的例子,

保存名爲「myalignment.fasta」並運行上面的代碼如下。它應該創建一個玩具如玩:

>1 
AACCAGGAGAAAATTAA 
>2 
AAAAA---GAAAATTAA 
>3 
ACACAGGAGAAAATTAA 
>4 
AACCTTGAGAAAATTAT 
>5 
CCTGAGGAGAAAATTAA 
+0

應創建一個最小的[再現的示例](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。包含示例數據(我們無法在本地計算機上讀取文件)。如果我們可以將代碼複製/粘貼到R中,則測試和幫助會更容易。如果問題是關於繪圖,請刪除與問題無關的任何代碼。 – MrFlick

+0

包函數通常包含使用內置數據集來演示函數如何工作的示例代碼。還可以使用'dput()'按照我包含的鏈接重新創建變量。您可以創建最少的數據用於問題本身。我只是建議這些東西,如果你想讓人們更容易幫助你。 – MrFlick

+0

@MrFlick我創建了一個可以用來重現代碼的最小「myalignment.fasta」。 – j91

回答

1

所以,如果你的問題是單點繪製的顏色,而不是標籤,你可以做

tiplabels(pch=19, cex=2, 
    col = species$Spe[match(fit$tree$tip.label, species$Ind)]) 

我做了一下專業體操的只是爲了讓確保標籤與物種匹配(儘管在本例中它們的順序相同)。

enter image description here