我正在遷移我在前幾天在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")
這是我想對明確界定的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")
有顏色爲黑色的衝突後邊緣不僅是可怕的。從科學的角度來看,這是誤導性的。有沒有辦法解決這個問題,並得到正確的陰謀?
編輯-------
如果你能做到這一點使用Python ETE工具包,我願意聽到你的聲音......