Friday, December 18, 2020

Co-phylogenetic plotting with different color linking lines

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)

plot of chunk unnamed-chunk-3

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)

plot of chunk unnamed-chunk-5

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))

plot of chunk unnamed-chunk-7

That's all there is to it!

2 comments:

  1. 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!

    ReplyDelete
  2. Hi Liam,
    is 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)

    ReplyDelete

Note: due to the very large amount of spam, all comments are now automatically submitted for moderation.