我使用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
感谢任何帮助!
答案 0 :(得分:1)
您的示例应该是可重现的,以便更容易帮助和重现您的问题。请参阅此帖子了解more details。我正在尝试iris
,它就像一个魅力。顺便说一下,我认为这里不需要adegenet
,plot
实际上是包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])
这就是你想要的吗?