Shortly after submitting the latest
CRAN
version of phytools, I discovered in interesting, unexpected “feature” of
the new method to
overlay
a tree on a lineage-through-time plot using ltt
.
The behavior appears when we set log="y"
in the S3 plotting
method for the object of class "ltt"
in which we set
show.tree=TRUE
. If we do that, we see the following:
obj<-ltt(tree)
plot(obj,log.lineages=FALSE,log="y",show.tree=TRUE)
At first, it looks OK - but then on closer inspection one quickly sees that the spacing of the edges is off. In fact, they have been plotted on a log, rather than a linear, scale. Oops! This occurs in spite of the fact that the lineage-through-time plot and the added phylogeny use different x & y scales in the standard plot as follows:
plot(obj,show.tree=TRUE)
I just posted an updated version of the code with this feature removed -
however if users like it, I will post a workaround hack. I basically
set the tip spacing of the plotted tree to exp(1:Ntip(tree)
if par()$ylog==TRUE
as follows:
if(show.tree){ tips<-if(par()$ylog) setNames(exp(1:Ntip(x$tree)),x$tree$tip.label) else setNames(1:Ntip(x$tree),x$tree$tip.label) plotTree(x$tree,color=rgb(0,0,1,transparency), ftype="off",add=TRUE,mar=par()$mar,tips=tips) }
Let's try it:
source("http://www.phytools.org/ltt/v1.4/ltt.R")
plot(obj,show.tree=TRUE) ## still works
plot(obj,log.lineages=FALSE,log="y",show.tree=TRUE) ## fixed
That's it.
No comments:
Post a Comment
Note: due to the very large amount of spam, all comments are now automatically submitted for moderation.