Tuesday, June 10, 2014

Coloring edges in phylomorphospace3d

A recent R-sig-phylo query asked the following about phytools function phylomorphospace3d (for projecting a tree into a three-dimensional morphospace):

"[Is t]here is a possbility to color some specific edges in the phylomorphospace3d()? plot.phylo() has the argument "edge.color" to do that in classical tree plotting. I need it, however, in the above mentioned function."

This functionality (as well as the ability to plot a stochastic character map on a phylomorphospace) exists for two-dimensional phylomorphospace plotting, but it did not (until now) exist for phylomorphospace3d; however, this was not too difficult to add. I have added user control of plotted line colors via the control parameter col.edge (as in phylomorphospace), rather than via a new function argument.

Code for this new function version is here; but users may prefer to install the latest bleeding edge source version of phytools (phytools 0.4-14) to ensure that everything works as advertised.

Here is a demo that plots the internal edges of a 3D phylomorphospace in blue, while the terminal edges are plotted in red:

## load phytools
packageVersion("phytools") ## should be >=0.4-14
## simulate tree
## create color vector
colors<-sapply(tree$edge[,2], function(x,n) if(x>n) "blue"
  else "red",n=length(tree$tip.label))
## generate 3D phylomorphospace plot

BTW, to create this cool .gif, you just need to do something like:


The same option is also available for method="static", e.g.:


That's it.

1 comment:

  1. I should have mentioned that to create an animated .gif using movie3d you need to first install ImageMagick. - Liam