A phytools user asks:
“I have been using mostly the plotTree.barplot
function of phytools but one thing I find difficult is how to manipulate
the arguments that modify the appearance of the tree graph. I cannot find documentation that is clearly described in one
place on how to manipulate for example the legend size, location or the distances among the bars. Whatever I have found is
through existing examples on the internet or your blog. Is there somewhere documentation on available arguments for
customizing the appearance of graphs (e.g., legend size, position, bar thickness etc)?”
plotTree.barplot
has quite a lot of flexibility to control the options for both the plotted tree & the barplot, although
it is not fully flexible.
Normally we do this using the arguments args.plotTree
, args.barplot
, and args.axis
(the lattermost to control the
appearance of the x-axis of our barplot panel).
Here's a quick demo. First, let's load phytools.
library(phytools)
Now we can proceed to get some data & a tree. This tree & data come from Garland et al. (1992).
data(mammal.tree)
mammal.tree
##
## Phylogenetic tree with 49 tips and 48 internal nodes.
##
## Tip labels:
## U._maritimus, U._arctos, U._americanus, N._narica, P._lotor, M._mephitis, ...
##
## Rooted; includes branch lengths.
data(mammal.data)
head(mammal.data)
## bodyMass homeRange
## U._maritimus 265.0 115.60
## U._arctos 251.3 82.80
## U._americanus 93.4 56.80
## N._narica 4.4 1.05
## P._lotor 7.0 1.14
## M._mephitis 2.5 2.50
Now I'm going to pull out my body size column as a vector with names.
bodyMass<-setNames(mammal.data$bodyMass,rownames(mammal.data))
OK, next let's use plotTree.barplot
with the default settings.
plotTree.barplot(mammal.tree,bodyMass)
Now, I'm going to go ahead and modify some of the setting of plotTree
as follows:
plotTree.barplot(mammal.tree,bodyMass,args.plotTree=list(fsize=0.7,lwd=2))
Finally, let's also modify the barplot
and axis
arguments using args.barplot
and args.axis
respectively.
Here, I'm also going to show my axis on the log-scale and update the labels to be nicer.
plotTree.barplot(mammal.tree,bodyMass,
args.plotTree=list(fsize=0.7,lwd=2,color="#336666"),
args.barplot=list(log="x",col="#336666",xlim=c(1,10000)),
args.axis=list(cex.axis=0.8,at=c(1,10,100,1000,10000),
labels=c("1kg","10kg","100kg","1t","10t")))
title(xlab="body mass")
Not bad, right?
Not bad at all! thank you!
ReplyDeleteHi Liam, great blog. Is there any way to make a figure using two continous traits: dotTree (eg body size) and plottree.barplot (eg range size) together.
ReplyDeleteAll the best,