I just
posted
an important update in the way that direction="leftwards"
trees are plotted using plotSimmap
, plotTree
, or
any other phytools function that uses plotSimmap
internally
(and there are many such functions).
The change is that in prior versions of plotSimmap
direction="leftwards"
was accomplished just by flipping the
direction of the x-axis of the plot. Now instead the direcction is
flipped by first flipping the coordinate system of the plotted tree, and then
plotting it on unfliped axes!
This will (hopefully) be of little consequence to most users. Please let me know ASAP if any plotting functions of phytools (or other packages that import phytools) are detrimentally affected.
Note that it is still possible to flip the x axis if desired.
Here is a demo:
library(phytools)
packageVersion("phytools")
## [1] '0.5.25'
tree
##
## Phylogenetic tree with 41 tips and 40 internal nodes.
##
## Tip labels:
## t1, t2, t3, t35, t36, t24, ...
##
## Rooted; includes branch lengths.
plotTree(tree,ftype="off",direction="leftwards",
mar=c(5.1,1.1,1.1,1.1))
axis(1)
Note that in prior versions of phytools, the axis would have been increasing
from right to left by default with direction="leftwards"
, as
follows:
plotTree(tree,ftype="off",xlim=c(100,0),
mar=c(5.1,1.1,1.1,1.1))
axis(1)
The preceding is actually a direction="rightwards"
tree facing
left!
We can also use direction="leftwards"
combined with a flipped
x axis to get a right facing tree in which the axis shows time
before present:
plotTree(tree,ftype="off",mar=c(5.1,1.1,1.1,1.1),xlim=c(100,0),
direction="leftwards")
axis(1)
title(xlab="time before present")
The reason I started working on this was because I was encountering some
weird behavior of ape's function nodelabels
with trees plotted
in a leftward direction. For instance, for the phytools plot
method for objects of class "describe.simmap"
:
tree
##
## Phylogenetic tree with 41 tips and 40 internal nodes.
##
## Tip labels:
## t1, t2, t3, t35, t36, t24, ...
##
## Rooted; includes branch lengths.
x
## t1 t2 t3 t35 t36 t24 t25 t5 t4 t31 t32 t15 t7 t19 t20 t17 t37 t38
## a a a a a a b a b b b b a b b a a a
## t12 t26 t27 t10 t18 t29 t30 t28 t33 t34 t22 t23 t13 t14 t8 t16 t21 t40
## a a a a a a a a a b a a a a b b b b
## t41 t39 t11 t9 t6
## b b b b a
## Levels: a b
trees<-make.simmap(tree,x,nsim=100)
## make.simmap is sampling character histories conditioned on the transition matrix
##
## Q =
## a b
## a -0.01531859 0.01531859
## b 0.01531859 -0.01531859
## (estimated using likelihood);
## and (mean) root node prior probabilities
## pi =
## a b
## 0.5 0.5
## Done.
obj<-summary(trees)
plot(obj) ## works fine
plot(obj,direction="leftwards") ## did not work
I'm not sure why, but I'm guessing that this had to do with flipping x instead of the coordinate system of the tree when plotting leftwards because when we simulate this, the problem indeed reappears:
plot(obj,xlim=c(105,-12))
## Error in symbols(xpos, ypos, circles = radius, inches = FALSE, add = TRUE, : invalid symbol parameter
As noted this could affect other phytools functions that use
plotSimmap
internally. For instance, it is easy to show that
plot.contMap
(for instance) is affected. E.g.:
y
## t1 t2 t3 t35 t36 t24 t25 t5 t4
## 0.2632 -0.4295 -2.0453 -3.3031 -2.7865 -3.5570 -0.5442 -2.9101 2.3353
## t31 t32 t15 t7 t19 t20 t17 t37 t38
## 6.1904 6.2993 8.6808 7.1557 9.9159 6.8316 -1.6050 -0.7766 -2.1087
## t12 t26 t27 t10 t18 t29 t30 t28 t33
## 4.5222 7.6534 10.2747 3.6215 12.9971 9.8071 8.2382 9.9934 9.9321
## t34 t22 t23 t13 t14 t8 t16 t21 t40
## 8.7258 7.1663 6.8482 8.4406 8.0642 5.0276 9.1044 9.7583 9.2502
## t41 t39 t11 t9 t6
## 9.0959 8.9720 9.6105 3.3538 3.0264
obj<-contMap(tree,y) ## plots fine
plot(obj,direction="leftwards") ## legend is backwards!
I can fix this (and will shortly), however please alert me to any other similar issues that you encounter. Thanks!
Data for this exercise were simulated as follows:
tree<-pbtree(n=30,b=1,d=0.4,scale=100)
Q<-matrix(c(-1,1,1,-1),2,2)/100
rownames(Q)<-colnames(Q)<-letters[1:2]
x<-as.factor(sim.history(tree,Q)$states)
y<-round(fastBM(tree),4)
The latest phytools version can be installed from GitHub as follows:
library(devtools)
install_github("liamrevell/phytools")
packageVersion("phytools")