## ---- include = FALSE---------------------------------------------------------
knitr::opts_chunk$set(
    collapse = TRUE,
    comment = "#>"
)

## ---- eval=TRUE, message=FALSE------------------------------------------------
#-- Libraries required in this section:
#-- TreeAndLeaf(>=1.4.2), RedeR(>=1.40.4), Bioconductor >= 3.13 (R >= 4.0)
# BiocManager::install(c("TreeAndLeaf","RedeR"))
# install.packages(c("igraph","RColorBrewer"))

#-- Load packages
library("TreeAndLeaf")
library("RedeR")
library("igraph")
library("RColorBrewer")

## ---- eval=TRUE, message=FALSE------------------------------------------------
#-- Check data
dim(USArrests)
head(USArrests)

## ---- eval=TRUE, message=FALSE------------------------------------------------
hc <- hclust(dist(USArrests), "ave")
plot(hc, main="Dendrogram for the 'USArrests' dataset",
     xlab="", sub="")

## ---- eval=FALSE--------------------------------------------------------------
#  #-- Convert the 'hclust' object into a 'tree-and-leaf' object
#  tal <- treeAndLeaf(hc)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Map attributes to the tree-and-leaf
#  #Note: 'refcol = 0' indicates that 'dat' rownames will be used as mapping IDs
#  tal <- att.mapv(g = tal, dat = USArrests, refcol = 0)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Set graph attributes using the 'att.setv' wrapper function
#  pal <- brewer.pal(9, "Reds")
#  tal <- att.setv(g = tal, from = "Murder", to = "nodeColor",
#                  cols = pal, nquant = 5)
#  tal <- att.setv(g = tal, from = "UrbanPop", to = "nodeSize",
#                  xlim = c(10, 50, 5), nquant = 5)
#  
#  #--- Set graph attributes using 'att.addv' and 'att.adde' functions
#  tal <- att.addv(tal, "nodeFontSize", value = 15, index = V(tal)$isLeaf)
#  tal <- att.adde(tal, "edgeWidth", value = 3)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Call RedeR application
#  rdp <- RedPort()
#  calld(rdp)
#  resetd(rdp)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Send the tree-and-leaf to the interactive R/Java interface
#  addGraph(obj = rdp, g = tal, gzoom=75)
#  
#  #--- Call 'relax' to fine-tune the leaf nodes
#  relax(rdp, p1=25, p2=200, p3=5, p5=5, ps=TRUE)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Add legends
#  addLegend.color(obj = rdp, tal, title = "Murder Rate",
#                  position = "topright")
#  addLegend.size(obj = rdp, tal, title = "Urban Population Size",
#                 position = "bottomright")

## ---- eval=FALSE, message=FALSE-----------------------------------------------
#  #-- Libraries required in this section:
#  #-- TreeAndLeaf(>=1.4.2), RedeR(>=1.40.4), Bioconductor >= 3.13 (R >= 4.0)
#  # BiocManager::install(c("TreeAndLeaf","RedeR","ggtree))
#  # install.packages(c("igraph","ape", "dendextend", "dplyr",
#  #                    "ggplot2", "RColorBrewer"))
#  
#  #-- Load packages
#  library("TreeAndLeaf")
#  library("RedeR")
#  library("igraph")
#  library("ape")
#  library("ggtree")
#  library("dendextend")
#  library("dplyr")
#  library("ggplot2")
#  library("RColorBrewer")

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Generate a random phylo tree
#  phylo_tree <- rcoal(300)
#  
#  #--- Set groups and node sizes
#  group <- size <- dendextend::cutree(phylo_tree, 10)
#  group[] <- LETTERS[1:10][group]
#  size[] <- sample(size)
#  group.df <- data.frame(label=names(group), group=group, size=size)
#  phylo_tree <- dplyr::full_join(phylo_tree, group.df, by='label')
#  
#  #--- Generate a ggtree with 'daylight' layout
#  pal <- brewer.pal(10, "Set3")
#  ggt <- ggtree(phylo_tree, layout = 'daylight', branch.length='none')
#  
#  #--- Plot the ggtree
#  ggt + geom_tippoint(aes(color=group, size=size)) +
#    scale_color_manual(values=pal) + scale_y_reverse()

## ---- eval=FALSE--------------------------------------------------------------
#  #-- Convert the 'ggtree' object into a 'tree-and-leaf' object
#  tal <- treeAndLeaf(ggt)
#  
#  #--- Map attributes to the tree-and-leaf
#  #Note: 'refcol = 1' indicates that 'dat' col 1 will be used as mapping IDs
#  tal <- att.mapv(g = tal, dat = group.df, refcol = 1)
#  
#  #--- Set graph attributes using the 'att.setv' wrapper function
#  tal <- att.setv(g = tal, from = "group", to = "nodeColor",
#                  cols = pal)
#  tal <- att.setv(g = tal, from = "size", to = "nodeSize",
#                  xlim = c(10, 50, 5))
#  
#  #--- Set graph attributes using 'att.addv' and 'att.adde' functions
#  tal <- att.addv(tal, "nodeFontSize", value = 1)
#  tal <- att.addv(tal, "nodeLineWidth", value = 0)
#  tal <- att.addv(tal, "nodeColor", value = "black", index=!V(tal)$isLeaf)
#  tal <- att.adde(tal, "edgeWidth", value = 3)
#  tal <- att.adde(tal, "edgeColor", value = "black")

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Call RedeR application
#  rdp <- RedPort()
#  calld(rdp)
#  resetd(rdp)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Send the tree-and-leaf to the interactive R/Java interface
#  addGraph(obj = rdp, g = tal, gzoom=50)
#  
#  #--- Select inner nodes, preventing them from relaxing
#  selectNodes(rdp, V(tal)$name[!V(tal)$isLeaf], anchor=TRUE)
#  
#  #--- Call 'relax' to fine-tune the leaf nodes
#  relax(rdp, p1=25, p2=100, p3=5, p5=1, p8=5, ps=TRUE)
#  
#  #--- Add legends
#  addLegend.color(obj = rdp, tal, title = "Group",
#                  position = "topright",vertical=T)
#  addLegend.size(obj = rdp, tal, title = "Size",
#                 position = "topleft",
#                 vertical=T, dxtitle=10)

## ---- eval=FALSE, message=FALSE-----------------------------------------------
#  #-- Libraries required in this section:
#  #-- TreeAndLeaf(>=1.4.2), RedeR(>=1.40.4), Bioconductor >= 3.13 (R >= 4.0)
#  # BiocManager::install(c("TreeAndLeaf","RedeR"))
#  # install.packages(c("igraph", "RColorBrewer"))
#  
#  #-- Load packages
#  library(TreeAndLeaf)
#  library(RedeR)
#  library(igraph)
#  library(RColorBrewer)

## ----echo=TRUE----------------------------------------------------------------
#-- Check data
dim(quakes)
head(quakes)

## ---- eval=TRUE, message=FALSE------------------------------------------------
#-- Building a large dendrogram
hc <- hclust(dist(quakes), "ave")
plot(hc, main="Dendrogram for the 'quakes' dataset",
     xlab="", sub="")

## ---- eval=FALSE--------------------------------------------------------------
#  #-- Convert the 'hclust' object into a 'tree-and-leaf' object
#  tal <- treeAndLeaf(hc)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Map attributes to the tree-and-leaf
#  #Note: 'refcol = 0' indicates that 'dat' rownames will be used as mapping IDs
#  tal <- att.mapv(tal, quakes, refcol = 0)
#  
#  #--- Set graph attributes using the 'att.setv' wrapper function
#  pal <- brewer.pal(9, "Greens")
#  tal <- att.setv(g = tal, from = "mag", to = "nodeColor",
#                  cols = pal, nquant = 10)
#  tal <- att.setv(g = tal, from = "depth", to = "nodeSize",
#                  xlim = c(40, 120, 20), nquant = 5)
#  
#  #--- Set graph attributes using 'att.addv' and 'att.adde' functions
#  tal <- att.addv(tal, "nodeFontSize", value = 1)
#  tal <- att.adde(tal, "edgeWidth", value = 10)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Call RedeR application
#  rdp <- RedPort()
#  calld(rdp)
#  resetd(rdp)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Send the tree-and-leaf to the interactive R/Java interface
#  addGraph(obj = rdp, g = tal, gzoom=10)
#  
#  #--- Call 'relax' to fine-tune the leaf nodes
#  relax(rdp, p1=25, p2=200, p3=10, p4=100, p5=10, ps=TRUE)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Add legends
#  addLegend.color(obj = rdp, tal, title = "Richter Magnitude",
#                  position = "bottomright")
#  addLegend.size(obj = rdp, tal, title = "Depth (km)")

## ---- eval=TRUE, message=FALSE------------------------------------------------
#-- Libraries required in this section:
#-- TreeAndLeaf(>=1.4.2), RedeR(>=1.40.4), Bioconductor >= 3.13 (R >= 4.0)
# BiocManager::install(c("TreeAndLeaf","RedeR","geneplast))
# install.packages(c("igraph","ape", "RColorBrewer"))

#-- Load packages
library(TreeAndLeaf)
library(RedeR)
library(igraph)
library(ape)
library(geneplast)
library(RColorBrewer)

## ---- eval=TRUE, message=FALSE------------------------------------------------
#-- Load data and plot the phylogenetic tree
data("spdata")
data("gpdata.gs")
plot(phyloTree)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Drop organisms not listed in the 'spdata' annotation
#  phyloTree$tip.label <- as.character(phyloTree$tip.label)
#  tokeep <- phyloTree$tip.label %in% spdata$tax_id
#  pruned.phylo <- drop.tip(phyloTree, phyloTree$tip.label[!tokeep])

## ---- eval=FALSE--------------------------------------------------------------
#  #-- Convert the phylogenetic tree into a 'tree-and-leaf' object
#  tal <- treeAndLeaf(pruned.phylo)
#  
#  #--- Map attributes to the tree-and-leaf
#  #Note: 'refcol = 1' indicates that 'dat' col 1 will be used as mapping IDs
#  tal <- att.mapv(g = tal, dat = spdata, refcol = 1)
#  
#  #--- Set graph attributes using the 'att.setv' wrapper function
#  pal <- brewer.pal(9, "Purples")
#  tal <- att.setv(g = tal, from = "genome_size_Mb",
#                  to = "nodeSize", xlim = c(120, 250, 1), nquant = 5)
#  tal <- att.setv (g = tal, from = "proteins",
#                   to = "nodeColor", nquant = 5,
#                   cols = pal, na.col = "black")

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Add graph attributes using 'att.adde' and 'att.addv' functions
#  tal <- att.addv(tal, "nodeFontSize", value = 10)
#  tal <- att.adde(tal, "edgeWidth", value = 20)
#  
#  # Set species names to 'nodeAlias' attribute
#  tal <- att.setv(tal, from = "sp_name", to = "nodeAlias")
#  
#  # Select a few names to highlight in the graph
#  tal <- att.addv(tal, "nodeFontSize", value = 100,
#         filter=list('name'=sample(pruned.phylo$tip.label,30)))
#  tal <- att.addv(tal, "nodeFontSize", value = 100,
#                  filter=list('name'="9606")) #Homo sapiens

## ---- eval=FALSE--------------------------------------------------------------
#  # Call RedeR
#  rdp <- RedPort()
#  calld(rdp)
#  resetd(rdp)
#  
#  #--- Send the tree-and-leaf to the interactive R/Java interface
#  addGraph(obj = rdp, g = tal, gzoom=10)
#  
#  #--- Call 'relax' to fine-tune the leaf nodes
#  relax(rdp, ps=TRUE)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Add legends
#  addLegend.color(rdp, tal, title = "Proteome Size (n)")
#  addLegend.size(rdp, tal, title = "Genome Size (Mb)")

## ---- eval=FALSE--------------------------------------------------------------
#  #-- Libraries required in this section:
#  #-- TreeAndLeaf(>=1.4.2), RedeR(>=1.40.4), Bioconductor >= 3.13 (R >= 4.0)
#  # BiocManager::install(c("TreeAndLeaf","RedeR","geneplast))
#  # install.packages(c("igraph","ape", "RColorBrewer"))
#  
#  #-- Load packages
#  library(TreeAndLeaf)
#  library(RedeR)
#  library(igraph)
#  library(ape)
#  library(geneplast)
#  library(RColorBrewer)

## ---- eval=FALSE, message=FALSE-----------------------------------------------
#  #-- Load data
#  data("spdata")
#  data("phylo_tree")

## ---- eval=FALSE, message=FALSE-----------------------------------------------
#  #--- Drop organisms not listed in the 'spdata' annotation
#  tokeep <- phylo_tree$tip.label %in% spdata$tax_id
#  pruned.phylo <- drop.tip(phylo_tree, phylo_tree$tip.label[!tokeep])

## ---- eval=FALSE--------------------------------------------------------------
#  #-- Convert the phylogenetic tree into a 'tree-and-leaf' object
#  tal <- treeAndLeaf(pruned.phylo)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Map attributes to the tree-and-leaf using "%>%" operator
#  tal <- tal %>%
#    att.mapv(dat = spdata, refcol = 1) %>%
#    att.setv(from = "genome_size_Mb", to = "nodeSize",
#             xlim = c(120, 250, 1), nquant = 5) %>%
#    att.setv(from = "proteins", to = "nodeColor", nquant = 5,
#             cols = brewer.pal(9, "Blues"), na.col = "black") %>%
#    att.setv(from = "sp_name", to = "nodeAlias") %>%
#    att.adde(to = "edgeWidth", value = 20) %>%
#    att.addv(to = "nodeFontSize", value = 10) %>%
#    att.addv(to = "nodeFontSize", value = 100,
#        filter = list("name" = sample(pruned.phylo$tip.label, 30))) %>%
#    att.addv(to = "nodeFontSize", value = 100,
#             filter = list("name" = "9606"))

## ---- eval=FALSE--------------------------------------------------------------
#  # Call RedeR
#  rdp <- RedPort()
#  calld(rdp)
#  resetd(rdp)
#  
#  #--- Send the tree-and-leaf to the interactive R/Java interface
#  addGraph(obj = rdp, g = tal, gzoom=5)
#  
#  #--- Call 'relax' to fine-tune the leaf nodes
#  relax(rdp, ps=TRUE)

## ---- eval=FALSE--------------------------------------------------------------
#  #--- Add legends
#  addLegend.color(rdp, tal, title = "Proteome Size (n)")
#  addLegend.size(rdp, tal, title = "Genome size (Mb)")

## ----label='Session information', eval=TRUE, echo=FALSE-----------------------
sessionInfo()

