I just
added
a couple of features to the phytools function dotTree. These come
in the form of the two optional arguments x.space and
leg.space. These arguments allow, respectively, manual control
of the horizontal spacing of the columns in a grid of circles or dots in a
visualization of multiple traits. Presently by default these circles have a
fixed spacing, which can be too wide when trait values for a relatively small
number of traits and a relatively large number of taxa are viewed.
For instance, let's start with a simulated tree & dataset with 50 taxa and 20 character traits:
library(phytools)
tree
##
## Phylogenetic tree with 50 tips and 49 internal nodes.
##
## Tip labels:
## t17, t33, t39, t15, t10, t21, ...
##
## Rooted; includes branch lengths.
dim(X)
## [1] 50 20
dotTree(tree,X,fsize=0.7)
This looks nice (at least in my unbiased opinion); however if we only plot two or three traits, by contrast, the columns seem over-spaced:
dotTree(tree,X[,1:3],fsize=0.7)
The new argument, x.space, allows us to change the interval over
which the columns are spaced:
dotTree(tree,X[,1:3],fsize=0.7,x.space=0.05)
The second new optional argument is leg.space, and this
argument allows us to change the spacing on the legend. (I also changed the
default value for this setting.)
dotTree(tree,X,fsize=0.7,leg.space=1,length=10)
(The argument length set the number of dots in the
legend.)
Note that the argument x.space should also work for
data.type="discrete" (the argument leg.space
doesn't apply), e.g.:
x
## t17 t33 t39 t15 t10 t21 t45 t36 t31 t35 t3 t16 t1 t37 t18 t34 t49 t27
## "b" "b" "b" "a" "a" "a" "a" "a" "b" "b" "a" "a" "a" "a" "b" "b" "a" "b"
## t13 t42 t12 t14 t30 t32 t25 t46 t20 t23 t28 t48 t47 t7 t26 t6 t9 t4
## "b" "a" "b" "a" "a" "a" "b" "b" "b" "b" "b" "b" "a" "a" "a" "b" "a" "b"
## t38 t22 t2 t50 t44 t40 t24 t43 t11 t41 t8 t29 t19 t5
## "a" "a" "a" "a" "a" "b" "a" "a" "a" "b" "a" "a" "a" "b"
y
## t17 t33 t39 t15 t10 t21 t45 t36 t31 t35 t3 t16 t1 t37 t18 t34 t49 t27
## "c" "d" "c" "c" "d" "c" "c" "c" "c" "d" "d" "d" "c" "c" "d" "d" "d" "c"
## t13 t42 t12 t14 t30 t32 t25 t46 t20 t23 t28 t48 t47 t7 t26 t6 t9 t4
## "c" "d" "d" "c" "c" "c" "c" "c" "c" "d" "d" "d" "c" "c" "c" "d" "c" "c"
## t38 t22 t2 t50 t44 t40 t24 t43 t11 t41 t8 t29 t19 t5
## "d" "c" "d" "d" "d" "d" "d" "d" "d" "c" "d" "d" "c" "c"
colors<-setNames(palette()[1:4],sort(unique(c(x,y))))
colors
## a b c d
## "black" "red" "green3" "blue"
dotTree(tree,cbind(x,y),fsize=0.7,colors=colors) ## the default
dotTree(tree,cbind(x,y),fsize=0.7,colors=colors,x.space=0.05) ## better
The tree & data were simulated as follows:
tree<-rtree(n=50)
X<-fastBM(tree,nsim=20)
Q<-matrix(c(-1,1,1,-1),2,2)
rownames(Q)<-colnames(Q)<-letters[1:2]
x<-sim.history(tree,Q)$states
rownames(Q)<-colnames(Q)<-letters[3:4]
y<-sim.history(tree,Q)$states
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.