Librería

ggtree

Datos de muestra

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.

La función 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)

Árbol filogenético en R con ggtree

Forma del árbol

Árbol filogenético circular con ggtree

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)

Puntos en las puntas y los nodos

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)

Árbol filogenético con puntos en las puntas y los nodos con ggtree

Números de los nodos

Árbol filogenético con los números de los nodos en ggtree

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)

Resaltar clados

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)

Resaltar clados en un árbol filogenético con ggtree

Color por clado

Colorear las ramas de un árbol filogenético por clado con ggtree

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.

MASTER - STATISTICS DOT COM

Master Statistics

Aprende estadística desde lo básico hasta técnicas avanzadas, explicado con claridad

Ir al sitio
R PACKAGES IO

R Packages

Explora y descubre miles de paquetes, funciones y datasets de R

Ir al sitio

También te puede interesar