convert graphic object to tree object using treeio

I have splitted ggtree to 2 packages, treeio and ggtree. Now ggtree is mainly focus on visualization and annotation, while treeio focus on parsing and exporting tree files. Here is a welcome message from treeio that you can convert ggtree output to tree object which can be exported as newick or nexus file if you want.

Thanks to ggplot2, output of ggtree is actually a ggplot object. The ggtree object can be rendered as graph by print method, but internally it is an object that contains data. treeio defines as.phylo and as.treedata to convert ggtree object to phylo or treedata object.

require(ggtree)
nhxfile <- system.file("extdata/NHX", "ADH.nhx", package="treeio")
nhx <- read.nhx(nhxfile)
p <- ggtree(nhx)

After parsing the NHX file via read.nhx function, we can visualize it using ggtree, and the output ggtree object can be converted back as a phylo object using as.phylo method:

as.phylo(p)

Phylogenetic tree with 8 tips and 4 internal nodes.

Tip labels: ADH2, ADH1, ADHY, ADHX, ADH4, ADH3, …

Rooted; includes branch lengths.

The output phylo object contains the tree structure.

If we want to also save associated annotation data, we can use as.treedata method:

as.treedata(p)

‘treedata’ S4 object that stored information of “.

…@ tree: Phylogenetic tree with 8 tips and 4 internal nodes.

Tip labels:

ADH2, ADH1, ADHY, ADHX, ADH4, ADH3, …

Rooted; includes branch lengths.

with the following features available: ’S’, ’D’, ‘B’.

In ggtree, we can use %<+% operator to attach user’s own data to graphic object and then use it to annotate the tree. as.treedata can also export these attached data to the tree object.

d = data.frame(label=as.phylo(nhx)$tip.label, trait=abs(rnorm(Ntip(nhx))))

p = p %<+% d

as.treedata(p)

‘treedata’ S4 object that stored information of “.

…@ tree:

Phylogenetic tree with 8 tips and 4 internal nodes.

Tip labels:

ADH2, ADH1, ADHY, ADHX, ADH4, ADH3, …

Rooted; includes branch lengths.

with the following features available: ’S’, ’D’, ‘B’, ‘trait’.

Here as an example, the trait variable was attached and exported to the tree object.

This trait variable can also be used in tree annotation.

x <- as.treedata(p)

ggtree(x) + geom_tiplab(align=T, offset=.005) + 
    geom_tippoint(aes(size=trait)) + xlim(NA, 0.28) + 
        geom_label(aes(x=branch, label=S)) 

We can visualize the tree by ggtree(tree_object) and we can convert the ggtree object back to tree object via as.treedata(ggtree_object).

If you lost your tree file but have the ggtree object saved, you can convert it back to tree object and export the tree object to newick or nexus file.

comments powered by Disqus