Learn R Programming

phyloseq (version 1.16.2)

tree_layout: Returns a data table defining the line segments of a phylogenetic tree.

Description

This function takes a phylo or phyloseq-class object and returns a list of two data.tables suitable for plotting a phylogenetic tree with ggplot2.

Usage

tree_layout(phy, ladderize = FALSE)

Arguments

phy
(Required). The phylo or phyloseq-class object (which must contain a phylogenetic tree) that you want to converted to data.tables suitable for plotting with ggplot2.
ladderize
(Optional). Boolean or character string (either FALSE, TRUE, or "left"). Default is FALSE (no ladderization). This parameter specifies whether or not to ladderize the tree (i.e., reorder nodes according to the depth of their enclosed subtrees) prior to plotting. This tends to make trees more aesthetically pleasing and legible in a graphical display. When TRUE or "right", ``right'' ladderization is used. When set to FALSE, no ladderization is applied. When set to "left", the reverse direction (``left'' ladderization) is applied.

Value

  • A list of two data.tables, containing respectively a data.table of edge segment coordinates, named edgeDT, and a data.table of vertical connecting segments, named vertDT. See example below for a simple demonstration.

See Also

An early example of this functionality was borrowed directly, with permission, from the package called ggphylo, released on GitHub at: https://github.com/gjuggler/ggphylo by its author Gregory Jordan gjuggler@gmail.com. That original phyloseq internal function, tree.layout, has been completely replaced by this smaller and much faster user-accessible function that utilizes performance enhancements from standard data.table magic as well as ape-package internal C code.

Examples

Run this code
library("ggplot2")
data("esophagus")
phy = phy_tree(esophagus)
phy <- ape::root(phy, "65_2_5", resolve.root=TRUE)
treeSegs0 = tree_layout(phy)
treeSegs1 = tree_layout(esophagus)
edgeMap = aes(x=xleft, xend=xright, y=y, yend=y)
vertMap = aes(x=x, xend=x, y=vmin, yend=vmax)
p0 = ggplot(treeSegs0$edgeDT, edgeMap) + geom_segment() + geom_segment(vertMap, data=treeSegs0$vertDT)
p1 = ggplot(treeSegs1$edgeDT, edgeMap) + geom_segment() + geom_segment(vertMap, data=treeSegs1$vertDT)
print(p0)
print(p1)
plot_tree(esophagus, "treeonly")
plot_tree(esophagus, "treeonly", ladderize="left")

Run the code above in your browser using DataLab