[R] Question about combining foodwebs and phylogenetic trees

Charles Lehnen ch@r|e@|ehnen @end|ng |rom gm@||@com
Tue May 5 17:25:42 CEST 2020


I have trying to combine foodweb outputs like the bipartite package's
plotweb() function of bipartiteD3’s bipartite_D3 function with phylogenetic
trees, similar to a tanglegram. Because of the very large size and a high
amount of variability in my dataset, standard tanglegrams turn out very
convoluted, but the plotweb() outputs are still lovely.

I was able to export tips to manually order the tips of the plotweb()
output to match the order of the phylogenetic tree tips which allowed me to
align tips manually in Inkscape, but this proved extremely time consuming
whenever I made an addition to my dataset.

require('ape')

tree1<-read.tree(text="((A,(B,(C,D))),E);")
tree1<-ladderize(tree1, right = FALSE)

tree2<-read.tree(text="(F,(G,((H,I),(J,K))));")

is_tip <- tree1$edge[,2] <= length(tree1$tip.label)
ordered_tips <- tree1$edge[is_tip, 2]
tree1tips<-tree1$tip.label[ordered_tips]

is_tip <- tree2$edge[,2] <= length(tree2$tip.label)
ordered_tips <- tree2$edge[is_tip, 2]
tree2tips<-tree2$tip.label[ordered_tips]


I tried to edit the plotweb() script to accept phylo class variables as an
additional argument, but that was evidently beyond my abilities at this
time.

I also tried combing the outputs using the grid package, we were able to
visually combine outputs next to one another and match the order of the
tips. However, I have not been able to figure out how to actually line up
the tips of the trees to the outputs of plotweb(). This becomes very
evident with my actual, very large dataset

require('ape')
require('bipartite')
require('ggplotify')
require('cowplot')
require('grid')

tree1<-read.tree(text="((A,(B,(C,D))),E);")
tree1<-ladderize(tree1, right = FALSE)

tree2<-read.tree(text="(F,(G,((H,I),(J,K))));")

bipartite<-cbind(c(0,2,3,2,0,0),c(2,0,2,4,8,0),c(4,3,0,0,5,0),c(0,2,0,0,0,1),c(0,7,2,2,0,0))
colnames(bipartite)<-c("D","C","B","A","E")
rownames(bipartite)<-c("K","J","I","H","G","F")
bipartite<-as.data.frame(bipartite)

p12 = as.grob(~cophyloplot(tree1, tree2))
bipartite = as.data.frame(t(bipartite))
p3 = as.grob(~plotweb(bipartite,
        method = "normal",
        empty = "false",
        text.rot = "90"
        ))
grid.newpage()
grid.draw(p12)
vp = viewport(x = 0.53, y = 0.6, width = 0.6, height = 0.8, angle = -90)
pushViewport(vp)
grid.draw(p3)


If anyone could direct me on how to proceed, I would greatly appreciate it!
I have been coming back to this problem for many months now and have not
been to solve it

	[[alternative HTML version deleted]]



More information about the R-help mailing list