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]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.