Librería

beeswarm

Autor principal

Aron Eklund

Los gráficos bee swarm son similares a los strip charts y están diseñados para mostrar la distribución subyacente de los datos, pero a diferencia de los strip charts, los datos se agrupan de tal manera que se evita que se solapen.

Gráfico beeswarm

El paquete beeswarm contiene una función del mismo nombre que permite crear este tipo de gráfico. Necesitas pasar un vector numérico, un data frame o una lista de vectores numéricos.

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)

# Beeswarm
beeswarm(x)

Bee swarm en R con la función beeswarm

El gráfico se puede personalizar de la misma manera que otros gráficos de R base. Cambia el color de los puntos, el símbolo y su tamaño con col, pch y cex, respectivamente.

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)

# Beeswarm
beeswarm(x,
         col = 2,   # Color
         pch = 18,  # Símbolo
         cex = 1.5) # Tamaño

Bee swarm personalización de los colores

El gráfico también se puede crear en modo horizontal, estableciendo vertical = FALSE o horizontal = TRUE.

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)

# Beeswarm horizontal
beeswarm(x, col = 4,
         vertical = FALSE) # O horizontal = TRUE

Beeswarm horizontal en R

Beeswarm por grupo

Si tienes una variable categórica que represente grupos es posible crear un beeswarm por grupo en base a los niveles de esa variable. Para ello pasa una fórmula a la función con las variables correspondientes.

Beeswarm por grupo en R

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)
g <- sample(c("G1", "G2", "G3"),
            size = 300, replace = TRUE)

# Beeswarm por grupo
beeswarm(x ~ g,
         pch = 19, 
         col = c("#3FA0FF", "#FFE099", "#F76D5E"))

Si tienes otra variable categórica que represente subgrupos dentro de los grupos principales puedes colorear los beeswarms con colores diferentes representando esas subcategorías. Usa el argumento pwcol para indicar los colores. Alternativamente, puedes establecer los símbolos pch con pwpch.

Bee swarm con subgrupos

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)
g <- sample(c("G1", "G2", "G3"),
            size = 300, replace = TRUE)
z <- as.numeric(factor(sample(c("Yes", "No"),
                size = 300, replace = TRUE)))

# Beeswarm por grupo
beeswarm(x ~ g,
         pch = 19, 
         pwcol = as.numeric(z))

# Leyenda
legend("topright", legend = c("Yes", "No"),
       col = 1:2, pch = 19)

Métodos gráficos

Hay varios métodos disponibles para ordenar los puntos de datos. Cada método usa un algoritmo diferente que asegura que los puntos de datos no se solapan.

Método “swarm” (por defecto)

Este método coloca los puntos en orden creciente.

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)

# Beeswarm método swarm
beeswarm(x, col = 4, pch = 19,
         method = "swarm")

Método swarm

Método “center”

El método "center" crea un panal simétrico usando una rejilla cuadrada.

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)

# Beeswarm método center
beeswarm(x, col = 4, pch = 19,
         method = "center")

Método center

Método “hex”

Este método usa un grid hexagonal para colocar los puntos.

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)

# Beeswarm método hex
beeswarm(x, col = 4, pch = 19,
         method = "hex")

Método hex para colocar los puntos en un beeswarm

Método “square”

Este método coloca los puntos en un grid cuadrado.

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)

# Beeswarm método square
beeswarm(x, col = 4, pch = 19,
         method = "square")

Beeswarm método square

Métodos de corral

Si algunas observaciones se situan fuera del gráfico puedes usar un método de “corral”, que ajustara esas observaciones de acuerdo al método seleccionado.

Observaciones sin método de corral

Por defecto

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

# Generación de datos
set.seed(1995)
x <- rnorm(1000)
g <- sample(c("G1", "G2", "G3"),
            size = 1000, replace = TRUE)

# Beeswarm por grupo
beeswarm(x ~ g, pch = 19, 
         col = c(rgb(0.25, 0.63, 1, 0.75),
                 rgb(1, 0.88, 0.6, 0.75),
                 rgb(0.97, 0.43, 0.37, 0.75)),
         corral = "none")

Método corral gutter

Método “gutter”

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

# Generación de datos
set.seed(1995)
x <- rnorm(1000)
g <- sample(c("G1", "G2", "G3"),
            size = 1000, replace = TRUE)

# Beeswarm por grupo
beeswarm(x ~ g, pch = 19, 
         col = c(rgb(0.25, 0.63, 1, 0.75),
                 rgb(1, 0.88, 0.6, 0.75),
                 rgb(0.97, 0.43, 0.37, 0.75)),
         corral = "gutter")

Método de corral wrap

Método “wrap”

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

# Generación de datos
set.seed(1995)
x <- rnorm(1000)
g <- sample(c("G1", "G2", "G3"),
            size = 1000, replace = TRUE)

# Beeswarm por grupo
beeswarm(x ~ g, pch = 19, 
         col = c(rgb(0.25, 0.63, 1, 0.75),
                 rgb(1, 0.88, 0.6, 0.75),
                 rgb(0.97, 0.43, 0.37, 0.75)),
         corral = "wrap")

Método de corral aleatorio

Método “random”

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

# Generación de datos
set.seed(1995)
x <- rnorm(1000)
g <- sample(c("G1", "G2", "G3"),
            size = 1000, replace = TRUE)

# Beeswarm por grupo
beeswarm(x ~ g, pch = 19, 
         col = c(rgb(0.25, 0.63, 1, 0.75),
                 rgb(1, 0.88, 0.6, 0.75),
                 rgb(0.97, 0.43, 0.37, 0.75)),
         corral = "random")

Método de corral omit en un beeswarm

Método “omit”

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

# Generación de datos
set.seed(1995)
x <- rnorm(1000)
g <- sample(c("G1", "G2", "G3"),
            size = 1000, replace = TRUE)

# Beeswarm por grupo
beeswarm(x ~ g, pch = 19, 
         col = c(rgb(0.25, 0.63, 1, 0.75),
                 rgb(1, 0.88, 0.6, 0.75),
                 rgb(0.97, 0.43, 0.37, 0.75)),
         corral = "omit")

Lados del bee swarm

Es posible mostrar solo uno de los lados de un beeswarm. Establece side = -1 para agregar los puntos a la izquierda (o hacia abajo).

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)
g <- sample(c("G1", "G2", "G3"),
            size = 300, replace = TRUE)

# Lado izquierdo
beeswarm(x ~ g, pch = 19, 
         col = c("#3FA0FF", "#FFE099", "#F76D5E"),
         side = -1)

Bee swarm lado izquierdo

Establece side = 1 para que los puntos se agreguen hacia la derecha o hacia arriba.

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)
g <- sample(c("G1", "G2", "G3"),
            size = 300, replace = TRUE)

# Lado derecho
beeswarm(x ~ g, pch = 19, 
         col = c("#3FA0FF", "#FFE099", "#F76D5E"),
         side = 1)

Gráfico beeswarm lado derecho

Prioridad

Cuando method = "swarm" puedes modificar el orden usado para construir el diseño prioritario. El método por defecto es "ascending" y los demás posibles valores se muestran a continuación. Recuerda escribir ?beeswarm para obtener información adicional sobre estos métodos.

Prioridad descending en la función beeswarm

Prioridad “descending”

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)
g <- sample(c("G1", "G2", "G3"),
            size = 300, replace = TRUE)

# Bee swarm con prioridad descending
beeswarm(x ~ g, pch = 19, 
         col = c("#3FA0FF", "#FFE099", "#F76D5E"),
         priority = "descending")

Beeswarm con prioridad random

Prioridad “random”

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)
g <- sample(c("G1", "G2", "G3"),
            size = 300, replace = TRUE)

# Bee swarm con prioridad random
beeswarm(x ~ g, pch = 19, 
         col = c("#3FA0FF", "#FFE099", "#F76D5E"),
         priority = "random")

Método density de prioridad

Prioridad “density”

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)
g <- sample(c("G1", "G2", "G3"),
            size = 300, replace = TRUE)

# Bee swarm con prioridad density
beeswarm(x ~ g, pch = 19, 
         col = c("#3FA0FF", "#FFE099", "#F76D5E"),
         priority = "density")

Método none de prioridad

Prioridad “none”

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

# Generación de datos
set.seed(1995)
x <- rnorm(300)
g <- sample(c("G1", "G2", "G3"),
            size = 300, replace = TRUE)

# Bee swarm con prioridad none
beeswarm(x ~ g, pch = 19, 
         col = c("#3FA0FF", "#FFE099", "#F76D5E"),
         priority = "none")

También te puede interesar