# This function creates a phylomorsphace plot of Sidlauskas (2006) # Written by Liam J. Revell 2010 phylomorphospace<-function(tree,X,A,control=list()){ # control list con=list(col.edge=matrix(data="black",nrow(tree$edge),1,dimnames=list(as.character(tree$edge[,2]),"color")), col.node=matrix(data="black",nrow(tree$edge),1,dimnames=list(as.character(tree$edge[,2]),"color"))) con[(namc <- names(control))] <- control con$col.edge<-as.matrix(con$col.edge); con$col.node<-as.matrix(con$col.node) require(calibrate) plot(x=A[1,1],y=A[1,2],xlim=range(c(X[,1],A[,1])),ylim=range(c(X[,2],A[,2])),xlab=colnames(X)[1],ylab=colnames(X)[2]) X<-X[tree$tip.label,] attach(tree); if(!exists("node.label")) tree$node.label<-as.character(length(tree$tip.label)+1:tree$Nnode); detach(tree) tree$node.label<-as.character(tree$node.label) A<-A[tree$node.label,] X<-rbind(X,A) for(i in 1:nrow(tree$edge)){ lines(x=c(X[tree$edge[i,1],1],X[tree$edge[i,2],1]),y=c(X[tree$edge[i,1],2],X[tree$edge[i,2],2]),col=con$col.edge[as.character(tree$edge[i,2]),1]) # lines(x=c(X[tree$edge[i,1],1],X[tree$edge[i,2],1]),y=c(X[tree$edge[i,1],2],X[tree$edge[i,2],2])) points(x=c(X[tree$edge[i,1],1],X[tree$edge[i,2],1]),y=c(X[tree$edge[i,1],2],X[tree$edge[i,2],2]),col=con$col.node[as.character(tree$edge[i,2]),1]) #points(x=c(X[tree$edge[i,1],1],X[tree$edge[i,2],1]),y=c(X[tree$edge[i,1],2],X[tree$edge[i,2],2])) if(tree$edge[i,2]<=length(tree$tip.label)) textxy(X=X[tree$edge[i,2],1],Y=X[tree$edge[i,2],2],labs=tree$tip.label[tree$edge[i,2]],cx=0.75) } }