Saturday, February 6, 2016

Update to phenogram to be used with nodelabels, tiplabels (plus a small bug fix)

I just added the feature that the traitgram plotting function in phytools, phenogram, will now also assign the environmental variable "last_plot.phylo" which will allow users to add things like tip, node, and edge labels to a plotted traitgram created using this function.

Details of this update can be viewed on the phytools GitHub page here, along with a fix for a bug in phenogram(...,spread.labels=TRUE) when the labels are non-overlapping to begin with.

Here's a demo in which I will overlay the observed & estimated ancestral values for a discrete character onto a plotted traitgram:

library(phytools)
packageVersion("phytools")
## [1] '0.5.16'
tree
## 
## Phylogenetic tree with 26 tips and 25 internal nodes.
## 
## Tip labels:
##  A, B, C, D, E, F, ...
## 
## Rooted; includes branch lengths.
x
##       A       B       C       D       E       F       G       H       I 
##  2.8600  2.1058  1.7397  2.8509 -1.8374  1.6606  5.6038  4.1693 -2.5189 
##       J       K       L       M       N       O       P       Q       R 
## -1.1314  4.9547  4.3946  5.8012  4.9661  6.0724  4.6994  3.5680  3.9083 
##       S       T       U       V       W       X       Y       Z 
##  1.8861  0.8216 -0.3356 -1.0667 -3.4524 -2.8598 -3.0773 -0.6128
y
## A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
## a b b b a b a a a b a a a a b c c c c b a b a b b b 
## Levels: a b c
phenogram(tree,x)
obj<-rerootingMethod(tree,y,model="SYM")
cols<-setNames(c("blue","magenta","red"),
    colnames(obj$marginal.anc))
nodelabels(pie=obj$marginal.anc,piecol=cols,cex=0.7)
tiplabels(pie=to.matrix(y,seq=colnames(obj$marginal.anc)),
    piecol=cols,cex=0.4)
add.simmap.legend(colors=cols,prompt=FALSE,x=0,y=6)

plot of chunk unnamed-chunk-1

This version of phytools can be installed as follows:

library(devtools)
install_github("liamrevell/phytools")

The data for this example were simulated using the following code:

tree<-pbtree(n=26,tip.label=LETTERS,scale=10)
x<-round(fastBM(tree),4)
Q<-matrix(c(-0.25,0.25,0,
    0.25,-0.5,0.25,
    0,0.25,-0.25),3,3)
rownames(Q)<-colnames(Q)<-letters[1:3]
y<-sim.history(tree,Q)$states
y<-setNames(as.factor(y),names(y))

No comments:

Post a Comment