2016-11-15 47 views
1

我正在遷移我在前幾天在ggtree's google forum中問過的一個問題。由於SO社區規模較大,更重要的是,由於我必須繼續我的項目,所以我會給出一個答案,讓這裏的某個人可能會有答案。我正在繪製一個系統發育樹,其中分支的顏色對應於物種。我的樹有滲入。這意味着:同一物種的所有個體可能不會連接到樹中的唯一節點,而是散佈在其周圍。爲了反映這種差異,我想將顏色分支分成一組屬於同一物種的個體(因此稱爲操作分類單位或OTU),直到發現衝突。例如,在下圖(無基因滲入)中,t3,t4和t10屬於「綠色」OTU,而t1,t2,t7和t8屬於「紅色」OTU。一旦這些不同的OTU碰到樹中的同一個節點,剩下的分支就會變成黑色。如何使用ggtree或Python的ETE工具包繪製基因滲入圖?

library(ggtree) 
set.seed(123) 
tree <- rtree(10) 

cls <- list(c1=c("t1", "t2","t8","t7"), 
     c2=c("t3", "t4", "t10"), 
     c3=c("t9","t6","t5")) 

tree <- groupOTU(tree, cls) 
ggtree(tree, aes(color=group)) + geom_text(aes(label=label)) + 
scale_color_manual(values=c("black", "red","green","blue")) + 
    theme(legend.position="right") 

Plot without introgression

這是我想對明確界定的OTU的行爲,不幸的是,一旦滲入被添加到方程,不同物種的個體在整個樹傳播,ggtree似乎顏色分配給基於某種多數人共識的衝突分支(左圖)。在下面的圖中,f1是「綠色」物種的一部分,已滲透到「紅色」物種的個體中。由於連接t1和t2的節點標誌着系統發育的差異,因此我希望將剩餘的邊緣染成黑色,直到原點(右圖)。

library(ggtree) 
set.seed(123) 
tree <- rtree(10) 

cls <- list(c1=c("t2","t8","t7"), 
     c2=c("t3", "t4", "t10","t1"), 
     c3=c("t9","t6","t5")) 

tree <- groupOTU(tree, cls) 
ggtree(tree, aes(color=group)) + geom_text(aes(label=label)) + 
scale_color_manual(values=c("black", "red","green","blue")) + 
    theme(legend.position="right") 

Plot with introgression - Bad colors Plot with introgression - Correct colors

有顏色爲黑色的衝突後邊緣不僅是可怕的。從科學的角度來看,這是誤導性的。有沒有辦法解決這個問題,並得到正確的陰謀?

編輯-------

如果你能做到這一點使用Python ETE工具包,我願意聽到你的聲音......

回答

相關問題