El paquete ggtree permite dibujar y anotar árboles filogenéticos usando la gramática de ggplot2, de modo que puedes añadir capas al árbol como en cualquier otro gráfico de ggplot2. Es un paquete de Bioconductor, por lo que necesitarás el paquete BiocManager para instalarlo.
En este tutorial vamos a utilizar el conjunto de datos bird.orders del paquete ape, que contiene el árbol filogenético de los 23 órdenes de aves. Si tienes tu propio árbol en un archivo Newick puedes importarlo con la función read.tree de ape o con el paquete treeio, que admite otros formatos.
# install.packages("ape")
library(ape)
data(bird.orders)
tree <- bird.orders
# Tu propio árbol:
# tree <- read.tree("arbol.nwk")
##
## Phylogenetic tree with 23 tips and 22 internal nodes.
##
## Tip labels:
## Struthioniformes, Tinamiformes, Craciformes, Galliformes, Anseriformes, Turniciformes, ...
##
## Rooted; includes branch lengths.
ggtree
Pasa el árbol a la función ggtree para dibujarlo y añade los nombres de las puntas con geom_tiplab. Ten en cuenta que las etiquetas se pueden cortar, por lo que puede que tengas que aumentar los límites del eje X con xlim.
# install.packages("BiocManager")
# BiocManager::install("ggtree")
library(ggtree)
ggtree(tree) +
geom_tiplab(size = 3) +
xlim(0, 40)


El argumento layout cambia la forma del árbol. Por defecto es "rectangular", pero también puedes usar "slanted", "ellipse", "roundrect", "fan", "circular", "radial", "equal_angle" o "daylight". En este ejemplo creamos un árbol circular.
ggtree(tree, layout = "circular") +
geom_tiplab(size = 2.5) +
xlim(0, 40)
Las funciones geom_tippoint y geom_nodepoint añaden puntos a las puntas y a los nodos internos del árbol, respectivamente. Como en ggplot2, puedes personalizar su color (color), tamaño (size) y forma (shape). El grosor de las ramas se puede cambiar con linewidth.
ggtree(tree, linewidth = 0.7) +
geom_tippoint(color = "#33658A", size = 2.5) +
geom_nodepoint(color = "#F26419", size = 2) +
geom_tiplab(size = 3, offset = 0.5) +
xlim(0, 40)


Para anotar un clado necesitarás el número de su nodo. Puedes mostrar los números de los nodos internos con geom_nodelab(aes(label = node)) u obtener el nodo del ancestro común más reciente de varias puntas con la función getMRCA de ape, como getMRCA(tree, c("Struthioniformes", "Tinamiformes")).
ggtree(tree) +
geom_tiplab(size = 3) +
geom_nodelab(aes(label = node), hjust = -0.3, size = 3, color = "#F26419") +
xlim(0, 40)
geom_hilight resalta un clado con un rectángulo, pasando el número de su nodo a node, y geom_cladelab añade una barra con una etiqueta a su derecha. En este ejemplo resaltamos los tres grandes grupos de aves: Palaeognathae (avestruces y tinamúes), Galloanserae (gallináceas y patos) y Neoaves (el resto de aves).
ggtree(tree) +
geom_tiplab(size = 2.5) +
geom_hilight(node = 26, fill = "#F6AE2D", alpha = 0.3) +
geom_hilight(node = 27, fill = "#33658A", alpha = 0.3) +
geom_hilight(node = 29, fill = "#F26419", alpha = 0.3) +
geom_cladelab(node = 26, label = "Palaeognathae", offset = 9, fontsize = 3) +
geom_cladelab(node = 27, label = "Galloanserae", offset = 9, fontsize = 3) +
geom_cladelab(node = 29, label = "Neoaves", offset = 9, fontsize = 3) +
xlim(0, 50)


Si quieres colorear las ramas por clado usa la función groupClade, que añade al árbol una variable group con el clado de cada rama, y asígnala a color dentro de aes. Los colores se pueden establecer con scale_color_manual, como en cualquier otro gráfico de ggplot2. Ten en cuenta que el primer grupo (0) contiene las ramas que no pertenecen a ningún clado. También añadimos una escala de las longitudes de las ramas con geom_treescale.
tree_groups <- groupClade(tree, .node = c(26, 27, 29))
ggtree(tree_groups, aes(color = group), linewidth = 0.8) +
geom_tiplab(size = 3) +
scale_color_manual(values = c("gray50", "#F6AE2D", "#33658A", "#F26419")) +
geom_treescale() +
xlim(0, 40) +
theme(legend.position = "none")
Si necesitas representar el resultado de un clúster jerárquico en lugar de un árbol filogenético consulta cómo crear un dendrograma con hclust o un dendrograma circular.
Aprende estadística desde lo básico hasta técnicas avanzadas, explicado con claridad
Ir al sitio
También te puede interesar