I recently received the following inquiry:
“I am attempting to use phytools and cophyloplot to compare two trees. I would like to color the tip labels and connectors between certain tip labels. For example, in the tree below I might like to have 't1' and 't3' red in both trees and the connectors between them also be red. I have not been able to find an example for this in your blog. Could you tell me how this can be done or direct me to a blog post that explains this.”
In fact, this is pretty straightforward to do in phytools using the plot.cophylo
argument link.col
.
Here's a quick demo.
Load phytools:
library(phytools)
Load some co-phylogenetic data. This comes from Lopez-Vaamonde et al. (2001):
data(wasp.trees)
print(wasp.trees,details=TRUE)
## 2 phylogenetic trees
## tree 1 : 19 tips
## tree 2 : 15 tips
data(wasp.data)
wasp.data
## Pleistodontes Sycoscapter
## 1 P._greenwoodi S._4_{obliqua}
## 2 P._xanthocephalus S._2_{aff._obliqua}
## 3 P._plebejus S._14_{hesperidiiformis}
## 4 P._rieki S._12_{xylosycia}
## 5 P._blandus S._11_{glandifera}
## 6 P._regalis S._8_{pleurocarpa}
## 7 P._nitens S._10_{crassipes}
## 8 P._schizodontes S._9_{triradiata}
## 9 P._imperialis S._15_{rubiginosa}
## 10 P._athysanus S._1_{brachypoda}
## 11 P._astrabocheilus S._7_{subpuberula}
## 12 P._proximus S._6_{lilliputiana}
## 13 P._macrocainus S._5_{cerasicarpa}
## 14 P._cuneatus S._3_{playpoda}
## 15 P._froggatti S._australis_{macrophylla}
Now let's create & plot a standard "cophylo"
object:
wasp.cophylo<-cophylo(wasp.trees[[1]],wasp.trees[[2]],
assoc=wasp.data)
## Rotating nodes to optimize matching...
## Done.
wasp.cophylo
## Object of class "cophylo" containing:
##
## (1) 2 (possibly rotated) phylogenetic trees in an object of class "multiPhylo".
##
## (2) A table of associations between the tips of both trees.
plot(wasp.cophylo)
That's pretty ugly. To get some more interesting colors for our linking lines, we can use the package randomcoloR as follows:
library(randomcoloR)
palette<-distinctColorPalette(nrow(wasp.data))
Let's graph these colors:
pie(rep(1,nrow(wasp.data)),col=palette)
Now, our lines cross (obviously) so a useful feature of our colors could be to make them semi-transparent so that linking lines from one taxon to the other are easier to follow. Let's do that:
palette<-make.transparent(palette,0.5)
Finally, let's create our new "cophylo"
plot:
par(lend=3)
plot(wasp.cophylo,link.col=palette,link.lwd=4,link.type="curved",
link.lty="solid",fsize=c(0.8,0.8))
That's all there is to it!
Hi Liam, is there any possibility to change the width of link line? For example, in the system you posted here, P._greenwoodi was associated with S._4_{obliqua} twice, while P._xanthocephalus and S._2_{aff._obliqua} ten times, can the latter be shown with thicker line? I tried several times with link.lwd = ncount but failed. It would be great if you can help with settling this issue. Thanks in advance!
ReplyDeleteHi Liam,
ReplyDeleteis it possible to change the tree ploting, for example the color of the node, tip and clades? node shap. also the show.tip.label didn't work
data(wasp.data)
> wasp.data
Pleistodontes Sycoscapter
1 P._greenwoodi S._4_{obliqua}
2 P._xanthocephalus S._2_{aff._obliqua}
3 P._plebejus S._14_{hesperidiiformis}
4 P._rieki S._12_{xylosycia}
5 P._blandus S._11_{glandifera}
6 P._regalis S._8_{pleurocarpa}
7 P._nitens S._10_{crassipes}
8 P._schizodontes S._9_{triradiata}
9 P._imperialis S._15_{rubiginosa}
10 P._athysanus S._1_{brachypoda}
11 P._astrabocheilus S._7_{subpuberula}
12 P._proximus S._6_{lilliputiana}
13 P._macrocainus S._5_{cerasicarpa}
14 P._cuneatus S._3_{playpoda}
15 P._froggatti S._australis_{macrophylla}
> wasp.cophylo<-cophylo(wasp.trees[[1]],wasp.trees[[2]],
+ assoc=wasp.data)
Rotating nodes to optimize matching...
Done.
> plot(wasp.cophylo, show.tip.label=FALSE)
I have also attempted, without any luck, to change the node colors
Delete