Diagrama de cuerdas (chord diagram) en R con circlize

Librería

circlize

Autor principal

Zuguang Gu

Conjunto de datos de muestra

La función chordDiagram se puede usar con una matriz de adyacencia o un data frame. En el siguiente bloque de código se crea una matriz y su data frame equivalente.

set.seed(1)
m <- matrix(sample(15, 15), 5, 3)
rownames(m) <- paste0("Fila", 1:5)
colnames(m) <- paste0("Col", 1:3)

# O usa un data frame
df <- data.frame(from = rep(rownames(m), ncol(m)),
                 to = rep(colnames(m), each = nrow(m)),
                 value = as.vector(m))

Diagrama de cuerdas básico

Dada una matriz o un data frame puedes pasarlo a la función chordDiagram del paquete circlize. La función conectará los valores de la matriz con arcos asignando colores aleatorios para cada arco cada vez que ejecutes la función.

# install.packages("circlize")
library(circlize)

chordDiagram(m)

# Resetea los parámetros gráficos circulares
circos.clear()

Gráfico de cuerdas en R

Personalización de los colores

Color del chord diagram con circlize

Colores del grid

Los colores que representan cada columna o fila de la matriz se pueden personalizar pasando un vector de nombres al argumento grid.col de la función.

# install.packages("circlize")
library(circlize)

colors <- c(Col1 = "lightgrey", Col2 = "grey",
            Col3 = "darkgrey", Fila1 = "#FF410D",
            Fila2 = "#6EE2FF", Fila3 = "#F7C530",
            Fila4 = "#95CC5E", Fila5 = "#D0DFE6")

chordDiagram(m, grid.col = colors)
circos.clear()

Transparencia del chord diagram

Transparencia

El argumento transparency controla el grado de transparencia de los arcos, cuanto menos sea más opaco será el color. El valor por defecto es 0.5.

# install.packages("circlize")
library(circlize)

colors <- c(Col1 = "lightgrey", Col2 = "grey",
            Col3 = "darkgrey", Fila1 = "#FF410D",
            Fila2 = "#6EE2FF", Fila3 = "#F7C530",
            Fila4 = "#95CC5E", Fila5 = "#D0DFE6")

chordDiagram(m, grid.col = colors,
             transparency = 0.2)
circos.clear()

Color de los enlaces de un gráfico de cuerdas

Color de los enlaces

Los colores de los enlaces se pueden cambiar con el argumento col. Tendrás que especificar tantos colores como número de elementos tenga la matriz. Alternativamente puedes usar row.col y column.col.

# install.packages("circlize")
library(circlize)

colors <- c(Col1 = "red", Col2 = "green",
            Col3 = "blue", Fila1 = "#FF410D",
            Fila2 = "#6EE2FF", Fila3 = "#F7C530",
            Fila4 = "#95CC5E", Fila5 = "#D0DFE6")

chordDiagram(m, grid.col = colors,
             col = hcl.colors(15))
circos.clear()

Paleta de colores en chord diagram en R

Usar una paleta de colores

Ten en cuenta que el argumento col también admite una función de color creada con colorRamp2, tal y como se muestra en el siguiente ejemplo.

# install.packages("circlize")
library(circlize)

colors <- c(Col1 = "red", Col2 = "green",
            Col3 = "blue", Fila1 = "#FF410D",
            Fila2 = "#6EE2FF", Fila3 = "#F7C530",
            Fila4 = "#95CC5E", Fila5 = "#D0DFE6")
cols <- colorRamp2(range(m), c("#E5FFFF", "#003FFF"))

chordDiagram(m, grid.col = colors, col = cols)
circos.clear()

Color de los bordes de los enlaces

Bordes de los enlaces

El borde de los enlaces se puede personalizar con link.lwd, link.lty y link.border para el ancho, el tipo y el color de las líneas de los enlaces.

# install.packages("circlize")
library(circlize)

cols <- hcl.colors(15, "Temps")

chordDiagram(m,
             col = cols,
             transparency = 0.1,
             link.lwd = 1,    # Ancho de línea
             link.lty = 1,    # Tipo de línea
             link.border = 1) # Color del borde

circos.clear()

Color del borde de un gráfico de cuerdas en R

Borde para filas específicas

Cabe destacar que el argumento link.border acepta una matriz como entrada. En el siguiente ejemplo estamos destacando la tercera fila de la matriz.

# install.packages("circlize")
library(circlize)

cols <- hcl.colors(15, "Geyser")
mb <- matrix("black", nrow = 1, ncol = ncol(m))
rownames(mb) <- rownames(m)[3] # Tercera fila
colnames(mb) <- colnames(m)

chordDiagram(m,
             col = cols,
             transparency = 0.1,
             link.lwd = 2,     # Grosor de línea
             link.lty = 2,     # Tipo de línea
             link.border = mb) # Color del borde

circos.clear()

Resaltar arcos de un gráfico de cuerdas en R

Anotaciones del diagrama

Por defecto se crean anotaciones para los nombres de los sectores, el grid y los ejes.

circlize annotationTrack en R

Grid

Estableciendo annotationTrack = "grid" se añadirá solo el grid. La altura se puede personalizar con annotationTrackHeight.

# install.packages("circlize")
library(circlize)

chordDiagram(m, column.col = c("red", "green", "blue"),
             annotationTrack = "grid",
             annotationTrackHeight = c(0.04, 0.02))

circos.clear()

Eliminar los ejes de un chord diagram

Nombres y grid

También puedes agregar los nombres y el grid y evitar dibujar los ejes.

# install.packages("circlize")
library(circlize)

chordDiagram(m, column.col = c("red", "green", "blue"),
             annotationTrack =  c("name", "grid"))

circos.clear()

Chord diagram sin ejes

Sin anotaciones

Por último, si quieres eliminar todas las anotaciones establece el argumento annotationTrack como NULL.

# install.packages("circlize")
library(circlize)

chordDiagram(m, column.col = c("red", "green", "blue"),
             annotationTrack = NULL)

circos.clear()

También te puede interesar