Monday, May 22, 2023

Adding a time axis to a tree plotted in arc style using phytools

Here’s a very quick tutorial on adding a time axis (using axis from R base graphics) to an “arc” style plotted tree with phytools.

For the example, I’ll use a time-calibrated phylogenetic tree of 175 species of elapid snakes from Lee et al. (2016).

The tree is stored in the file elapidae.tre.

## load packages
library(phytools)
library(plotrix)
elapidae.tree<-read.tree(file="elapidae.tre")
elapidae.tree
## 
## Phylogenetic tree with 175 tips and 174 internal nodes.
## 
## Tip labels:
##   Calliophis_bivirgata, Calliophis_melanurus, Sinomicrurus_japonicus, Sinomicrurus_kelloggi, Sinomicrurus_macclellandi, Micruroides_euryxanthus, ...
## 
## Rooted; includes branch lengths.

I’m going to set the arc height to be 40% of the total tree height using arc_height=0.4.

To draw my time axis I’ll use the functions axis (in base R) and draw.arc (from plotrix).

arc_height<-0.4
h<-max(nodeHeights(elapidae.tree))
plotTree(elapidae.tree,type="arc",lwd=1,fsize=0.45,ftype="i",
  arc_height=arc_height,ylim=c(-0.1*h,1.1*(1+arc_height)*h))
labs<-seq(0,h,by=5)
a1<-axis(1,pos=-0.02*h,at=h-labs+arc_height*h,
  labels=labs,cex.axis=0.8,lwd=2,lend=2)
text(mean(a1),-0.23*h,"million years bp",font=3)
a2<-axis(1,pos=-0.02*h,at=-h+labs-arc_height*h,
  labels=labs,cex.axis=0.8,lwd=2,lend=2)
text(mean(a2),-0.23*h,"million years bp",font=3)
draw.arc(0,0,radius=h-labs[2:length(labs)]+arc_height*h,
  angle1=,angle2=pi,col=make.transparent("blue",0.4),
  lty="dotted")

plot of chunk unnamed-chunk-5

Cool.