I just added the feature to `dotTree`

(previously described
previously on this blog here:
1,
2)
to permit discrete characters. In this case the dots will simply be colored by
state.

For a single trait a similar effect can be produced using
`tiplabels`

in the ape package; however the advantage of
`dotTree`

is that it an easily simultaneously represent the tip
states for a large number of traits.

Here's a quick demo with 6 binary traits:

```
library(phytools)
packageVersion("phytools")
```

```
## [1] '0.5.18'
```

```
tree
```

```
##
## Phylogenetic tree with 50 tips and 49 internal nodes.
##
## Tip labels:
## t12, t16, t29, t30, t14, t15, ...
##
## Rooted; includes branch lengths.
```

```
X
```

```
## [,1] [,2] [,3] [,4] [,5] [,6]
## t12 "a" "b" "b" "a" "b" "b"
## t16 "a" "b" "b" "a" "a" "b"
## t29 "a" "b" "a" "a" "a" "a"
## t30 "b" "a" "a" "b" "a" "a"
## t14 "b" "b" "a" "a" "a" "a"
## t15 "a" "a" "a" "b" "a" "a"
## t2 "b" "b" "a" "a" "a" "a"
## t32 "b" "b" "a" "a" "b" "a"
## t33 "b" "b" "a" "a" "b" "a"
## t21 "b" "a" "a" "b" "a" "a"
## t47 "b" "b" "b" "a" "a" "a"
## t48 "b" "b" "b" "a" "a" "a"
## t34 "b" "b" "b" "a" "b" "a"
## t23 "b" "a" "b" "b" "a" "a"
## t25 "b" "b" "b" "a" "a" "a"
## t26 "b" "b" "a" "a" "b" "a"
## t9 "a" "a" "b" "a" "a" "a"
## t10 "a" "a" "b" "b" "a" "a"
## t3 "b" "b" "b" "b" "a" "a"
## t8 "b" "a" "a" "b" "b" "a"
## t43 "a" "a" "a" "a" "a" "a"
## t44 "a" "a" "a" "a" "a" "a"
## t39 "a" "a" "b" "b" "b" "b"
## t40 "a" "a" "a" "b" "b" "b"
## t1 "b" "a" "a" "b" "a" "b"
## t4 "b" "b" "b" "b" "a" "a"
## t5 "b" "b" "a" "b" "a" "a"
## t13 "b" "b" "a" "b" "b" "b"
## t41 "b" "a" "a" "a" "b" "a"
## t42 "b" "a" "b" "a" "b" "a"
## t17 "b" "a" "b" "a" "b" "b"
## t18 "b" "b" "b" "a" "b" "a"
## t27 "a" "b" "b" "a" "b" "b"
## t28 "b" "b" "a" "a" "b" "b"
## t24 "b" "b" "b" "a" "b" "b"
## t49 "b" "a" "a" "a" "b" "a"
## t50 "b" "a" "a" "a" "b" "a"
## t22 "b" "b" "a" "b" "a" "a"
## t45 "b" "b" "a" "a" "a" "a"
## t46 "b" "b" "a" "a" "a" "a"
## t38 "b" "b" "a" "a" "b" "a"
## t11 "b" "b" "b" "a" "b" "a"
## t19 "a" "a" "a" "a" "b" "b"
## t31 "a" "b" "a" "a" "a" "b"
## t35 "a" "a" "a" "a" "b" "a"
## t36 "b" "b" "a" "a" "b" "b"
## t37 "a" "a" "a" "a" "b" "a"
## t20 "a" "a" "a" "b" "a" "b"
## t7 "a" "a" "a" "b" "a" "b"
## t6 "a" "b" "a" "a" "b" "b"
```

```
colors<-setNames(c("blue","red"),c("a","b"))
colors
```

```
## a b
## "blue" "red"
```

```
dotTree(tree,X,colors=colors,data.type="discrete",fsize=0.7)
```

Like `dotTree`

for `data.type="continuous"`

, it
also has a method using `plotTree`

internally which works
for one character. For instance:

```
X[,1]
```

```
## t12 t16 t29 t30 t14 t15 t2 t32 t33 t21 t47 t48 t34 t23 t25 t26 t9 t10
## "a" "a" "a" "b" "b" "a" "b" "b" "b" "b" "b" "b" "b" "b" "b" "b" "a" "a"
## t3 t8 t43 t44 t39 t40 t1 t4 t5 t13 t41 t42 t17 t18 t27 t28 t24 t49
## "b" "b" "a" "a" "a" "a" "b" "b" "b" "b" "b" "b" "b" "b" "a" "b" "b" "b"
## t50 t22 t45 t46 t38 t11 t19 t31 t35 t36 t37 t20 t7 t6
## "b" "b" "b" "b" "b" "b" "a" "a" "a" "b" "a" "a" "a" "a"
```

```
dotTree(tree,X[,1],fsize=0.7,ftype="i") ## default colors
```

The code of this update can be seen here.

The data above were simulated as follows:

```
tree<-pbtree(n=50)
Q<-matrix(c(-1,1,1,-1),2,2,dimnames=list(letters[1:2],letters[1:2]))
X<-replicate(6,sim.history(tree,Q)$states)
```

Finally, phytools can be installed from GitHub using devtools, e.g.:

```
library(devtools)
install_github("liamrevell/phytools")
```

Thank you very much for this great addition. May I ask if there's any way to add bootstrap value by each node on the tree plotted by dotTree?

ReplyDeleteGood question. I posted a response here. I hope it's helpful. Liam

DeleteHello Liam,

ReplyDeleteI would like to know how do you change the size of the red/blue circles please ?

Thank you !

Ombeline

Hello,

ReplyDeleteIf you are trying to plot multiple columns of discrete data, do the data frames need to have matching factor levels?

I am having issues trying to plot a dotTree with two rows of discrete data with

x <- five discrete variables

y <- two discrete variables

Any advice would be greatly appreciated!