Visualize tree with associated matrix
The gheatmap
function is designed to visualize phylogenetic tree with heatmap of associated matrix.
In the following example, we visualized a tree of H3 influenza viruses with their associated genotype.
beast_file <- system.file("examples/MCC_FluA_H3.tree", package="ggtree")
beast_tree <- read.beast(beast_file)
genotype_file <- system.file("examples/Genotype.txt", package="ggtree")
genotype <- read.table(genotype_file, sep="\t", stringsAsFactor=F)
colnames(genotype) <- sub("\\.$", "", colnames(genotype))
p <- ggtree(beast_tree, mrsd="2013-01-01") + geom_treescale(x=2008, y=1, offset=2)
p <- p + geom_tiplab(size=2)
gheatmap(p, genotype, offset = 5, width=0.5, font.size=3, colnames_angle=-45, hjust=0) +
scale_fill_manual(breaks=c("HuH3N2", "pdm", "trig"), values=c("steelblue", "firebrick", "darkgreen"))
The width parameter is to control the width of the heatmap. It supports another parameter offset for controlling the distance between the tree and the heatmap, for instance to allocate space for tip labels.
For time-scaled tree, as in this example, it’s more often to use x axis by using theme_tree2
. But with this solution, the heatmap is just another layer and will change the x
axis. To overcome this issue, we implemented scale_x_ggtree
to set the x axis more reasonable.
Visualize tree with multiple sequence alignment
With msaplot
function, user can visualize multiple sequence alignment with phylogenetic tree, as demonstrated below:
fasta <- system.file("examples/FluA_H3_AA.fas", package="ggtree")
msaplot(ggtree(beast_tree), fasta)
A specific slice of the alignment can also be displayed by specific window parameter.
Annotate a phylogenetic tree with insets
ggtree
provides a function, inset
, for adding subplots to a phylogenetic tree. The input is a tree graphic object and a named list of ggplot graphic objects (can be any kind of charts), these objects should named by node numbers. To facilitate adding bar and pie charts (e.g. summarized stats of results from ancestral reconstruction) to phylogenetic tree, ggtree provides nodepie
and nodebar
functions to create a list of pie or bar charts.
Annotate with bar charts
set.seed(2015-12-31)
tr <- rtree(15)
p <- ggtree(tr)
a <- runif(14, 0, 0.33)
b <- runif(14, 0, 0.33)
c <- runif(14, 0, 0.33)
d <- 1 - a - b - c
dat <- data.frame(a=a, b=b, c=c, d=d)
## input data should have a column of `node` that store the node number
dat$node <- 15+1:14
## cols parameter indicate which columns store stats (a, b, c and d in this example)
bars <- nodebar(dat, cols=1:4)
inset(p, bars)
The sizes of the insets can be ajusted by the paramter width and height.
Users can set the color via the parameter color. The x position can be one of ‘node’ or ‘branch’ and can be adjusted by the parameter hjust and vjust for horizontal and vertical adjustment respecitvely.
Annotate with pie charts
Similarly, users can use nodepie
function to generate a list of pie charts and place these charts to annotate corresponding nodes. Both nodebar
and nodepie
accepts parameter alpha to allow transparency.
Annotate with other types of charts
The inset
function accepts a list of ggplot graphic objects and these input objects are not restricted to pie or bar charts. They can be any kinds of charts and hybrid of these charts.
d <- lapply(1:15, rnorm, n=100)
ylim <- range(unlist(d))
bx <- lapply(d, function(y) {
dd <- data.frame(y=y)
ggplot(dd, aes(x=1, y=y))+geom_boxplot() + ylim(ylim) + theme_inset()
})
names(bx) <- 1:15
inset(p, bx, width=.06, height=.2, hjust=-.05)
After annotating with insets, users can further annotate the tree with another layer of insets.
Annotate with image files
Plot tree with associated data
For associating phylogenetic tree with different type of plot produced by user’s data, ggtree
provides facet_plot
function which accepts an input data.frame
and a geom
function to draw the input data. The data will be displayed in an additional panel of the plot.
tr <- rtree(30)
d1 <- data.frame(id=tr$tip.label, val=rnorm(30, sd=3))
p <- ggtree(tr)
p2 <- facet_plot(p, panel="dot", data=d1, geom=geom_point, aes(x=val), color='firebrick')
d2 <- data.frame(id=tr$tip.label, value = abs(rnorm(30, mean=100, sd=50)))
facet_plot(p2, panel='bar', data=d2, geom=geom_segment, aes(x=0, xend=value, y=y, yend=y), size=3, color='steelblue') + theme_tree2()
Tree annotation with Phylopic
PhyloPic is a database that stores reusable silhouette images of organisms. ggtree
supports downloading images from PhyloPic and annotating phylogenetic tree with the downloaded images.