Hello,
I am currently trying to prepare a phylogenetic tree for a poster - what I want to do is map three traits to each tip label. I want one column for each trait with different colours. I have everything figured out, I have the legend, the headings for each column, I have the exact order of the tip labels associated with the right traits, but I have problems plotting it in a nice way in the graph.
I used a plot.phylo2 command to plot the tree so that the tip labels are nicely aligned on the right side, because otherwise the tip labels are associated with the end of the tree branches and this doesn't look nice. However, when I map the traits - it places them right at the end of the branches, so they are in no way aligned and I don't know how to align them nicely in a column. Using the adj command doesn't help, because it just moves them to the right or left, without aligning them in one column.
Is there anyone, who could help me out with this?
Tree file:
(P_fluorescens:0.143294,((Ps_actinidiae_J30:0.009843999999999992,Ps_tomato:0.005957999999999991):0.014249000000000012,(K36B-III:0.019223000000000004,(R15C-I:0.005366999999999997,(R13A-I:7.100000000000162E-5,R14C-I:0.0021609999999999963):0.008161000000000002):0.011004):0.03967):0.0);
Traits:
id host
P_fluorescens red
Ps_actinidiae_J30 green
Ps_tomato red
K36B-III green
R13A-I red
R14C-I green
R-script
library(ape)
library(geiger)
library(phytools)
###########################################################################
#Load tree
###########################################################################
treefile<-"R-sampletree.newick"
read.newick(treefile) -> tree
summary(tree)
tree<-root(tree, "P_fluorescens")
tree <- collapse.singles(tree)
ladderize(tree, right=TRUE) -> lad_tree
lad_tree$edge[,2]->nodes
nodes[nodes<=length(lad_tree$tip.label)] -> tip.order
lad_tree$tip.label[tip.order] -> tip.label.order
###########################################################################
# Load trait data
###########################################################################
read.csv("traits-2.csv") -> unsorted.traitsData
data.frame(unsorted.traitsData[,2:4]) -> unsorted.traits
unsorted.traitsData[,1] -> rownames(unsorted.traits)
unsorted.traits[tip.label.order,] -> traits
host<-traits[,1]
names(host)<-row.names(traits)
host
###########################################################################
#Plot a tree with dots connecting to the tip labels aligned on the left
###########################################################################
plot.phylo2 <- plot.phylo
environment(plot.phylo2) <- environment(plot.phylo)
body(plot.phylo2)[[c(34, 3, 6, 3, 4, 3)]] <- quote({
mx <- max(xx[1:Ntip])
segments(xx[1:Ntip], yy[1:Ntip] + loy, mx, yy[1:Ntip] + loy,
lty=2, col="white")
text(mx + lox, yy[1:Ntip] + loy, x$tip.label, adj = adj,
font = font, srt = srt, cex = cex, col = tip.color)
})
###########################################################################
#Plot the trait data onto the tree
###########################################################################
host_colour<-rep("white", length(host))
names(host_colour)<-row.names(traits)
host_colour[host==""]<-"white"
host_colour[host=="red"]<-"darkgoldenrod1"
host_colour[host=="green"]<-"springgreen4"
par(mar=c(8,2,2,2), oma=c(2,2,2,2))
pdf("Tree.pdf", width=15, height=100)
plot.phylo2(lad_tree, label.offset=0.1, cex=0.95, font=1)
title(main="Tree", cex.main=1,line=3)
add.scale.bar(cex=0.5)
# Add the traits
tiplabels(pch=22, cex=1.1, bg=host_colour[lad_tree$tip.label])
dev.off()
I am not expert of phytools. But I love using ggtree. Worth trying this for tree visualisation in R