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.
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)
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
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
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.
# 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
.
# 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)
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 “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 “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 “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")
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.
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 “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 “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 “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 “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")
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)
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)
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”
# 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")
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")
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")
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