使用adegenet R包的树中不同簇的不同颜色

时间:2016-03-27 04:34:42

标签: r plot phylogeny

我使用R包adegenet绘制邻居加入树。

在我的文件中,我有20,000列和500行。行对应于个人。我的第一列是人口ID,第二列是个人ID。列包含值0,1& 2.我可以用一种颜色绘制树,但根据人口,我希望每个簇都是不同的颜色。

这就是我所做的,如果“dat”是我的数据文件,那么

D<-dist(as.matrix(dat))
tre<-nj(D)
plot(tre, type = "unr", show.tip.lab = TRUE, cex=0.3, font=1, edge.col="Blue")

如果我尝试edge.col=c("red","green","blue"),我会遇到以下错误:

Error in if (use.edge.length) unrooted.xy(Ntip, Nnode, z$edge, z$edge.length,  : 
  argument is not interpretable as logical

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您的示例应该是可重现的,以便更容易帮助和重现您的问题。请参阅此帖子了解more details。我正在尝试iris,它就像一个魅力。顺便说一下,我认为这里不需要adegenetplot实际上是包plot.phylo中的ape},所有其他功能都是内置的或来自ape)。

文档(?plot.phylo)说:

  

edge.col模式字符的向量,给出用于绘制绘制的系统发育的分支的颜色。这些被视为与phy的组件边缘相同的顺序。如果给出的颜色少于边缘长度,则颜色会被回收。

ape会保留订单或行,您可以使用factor为颜色矢量编制索引,因此使用iris的可重现示例可能是:

library(ape)
D <-dist(as.matrix(iris[, 1:4]))
tree <- nj(D)
plot(tree, type = "unr", show.tip.lab = TRUE, cex=0.3, font=1, 
           edge.col=c("red","green","blue")[iris$Species])

这就是你想要的吗?