Está en la página 1de 9

DIAGRAMA DE DISPERSIÓN POR GRUPO

https://r-charts.com/es/correlacion/grafico-dispersion-grupo/

Datos de muestra
Los datos utilizados en este tutorial son las siguientes variables aleatorias. Copia y pega este
có digo en tu consola para ejecutar los ejemplos.
# Datos
set.seed(34)
x <- runif(300)
y <- 5 * x ^ 2 + rnorm(length(x), sd = 2)
grupo <- ifelse(x < 0.4, "Grupo 1",
ifelse(x > 0.8, "Grupo 2",
"Grupo 3"))
# Ruido aleatorio
x <- x + runif(length(x), -0.2, 0.2)

Si tienes una variable categó rica representando grupos puedes crear un diagrama de
dispersió n (nube de puntos), pasando dicha variable (como factor) al argumento col de la
funció n plot, de modo que cada grupo se mostrará en un color diferente.
# Gráfico de dispersión
plot(x, y,
pch = 19,
col = factor(grupo))

# Leyenda
legend("topleft",
legend = levels(factor(grupo)),
pch = 19,
col = factor(levels(factor(grupo))))

Ten en cuenta que internamente la funció n almacena los factores como enteros (1 = "black", 2
= "red", 3 = "green", …).
Cambiar los colores por defecto
Si quieres cambiar los colores por defecto puedes crear un vector de colores y pasarlos a la
funció n tal y como se muestra en el siguiente bloque de có digo.

# Selección de colores
colores <- c("#FDAE61", # Naranja
"#D9EF8B", # Verde claro
"#66BD63") # Verde oscuro

# Gráfico de dispersión
plot(x, y,
pch = 19,
col = colores[factor(grupo)])

# Leyenda
legend("topleft",
legend = c("Grupo 1", "Grupo 2", "Grupo 3"),
pch = 19,
col = colores)

Sin embargo, los colores mostrados en el grá fico no siguen el orden del vector de colores
especificados, sino que siguen el orden de los niveles del factor (naranja para el grupo 1, verde
claro para el grupo 2 y verde oscuro para el grupo 3)
Reordenar los colores de los grupos
Como el color que se utiliza se basa en los niveles de la variable categó rica, es posible
reordenar los niveles para cambiar el orden de los colores, tal y como se muestra en el
siguiente ejemplo.
# Selección de colores
colores <- c("#FDAE61", # Naranja
"#D9EF8B", # Verde claro
"#66BD63") # Verde oscuro
# Reorder the factor levels
grupos_ordenados <- factor(grupo, levels = c("Grupo 2",
"Grupo 1",
"Grupo 3"))
# Diagrama de dispersión
plot(x, y,
pch = 19,
col = colores[grupos_ordenados])
# Legend
legend("topleft",
legend = c("Grupo 1", "Grupo 2", "Grupo 3"),
pch = 19,
col = colores[factor(levels(grupos_ordenados))])

Ahora el primer color (naranja) es para el grupo 2, el verde claro para el grupo 1 y el verde
oscuro para el grupo 3.
Gráfico de dispersión conectado con la función plot
Un grá fico de dispersió n conectado representa la relació n entre dos variables, generalmente a
través del tiempo. Puedes crear este tipo de grá fico en R base con la funció n plot,
estableciendo type = "b".
# Datos
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)

# Gráfico de dispersión conectado


plot(x, y, type = "b",
xlab = "Var 1", ylab = "Var 2")

Símbolo
El símbolo usado por defecto cuando type = "b" se puede modificar haciendo uso del
argumento pch.
# Datos
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)

plot(x, y,
type = "b", pch = 18,
xlab = "Var 1", ylab = "Var 2")
Colores y puntos
Puedes cambiar el color de las líneas y de los puntos. Sin embargo, el color de los puntos y las
líneas será el mismo. Puedes sobrescribir los puntos utilizando la funció n points.
# Datos
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)

# Puntos y colores
plot(x, y, type = "b",
pch = 19, col = 4,
xlab = "Var 1", ylab = "Var 2")
points(x, y, pch = 19)

Agregar texto
Puedes etiquetar los puntos con la funció n text. Esto puede ser ú til, por ejemplo, para
etiquetar la fecha para cada conjunto de observaciones. Ten en cuenta que hemos ajustado la
posició n de las etiquetas para mejor legibilidad.
# Datos
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)
labels <- 2013:2021

# Gráfico de dispersión conectado with text


plot(x, y, type = "b",
xlim = c(1, 10), ylim = c(12, 23),
pch = 19, col = 4,
xlab = "Var 1", ylab = "Var 2")
text(x + 0.7, y + 0.4, labels)
Gráfico de dispersión conectado con flechas
Otra posibilidad es usar flechas para dibujar la ruta entre las observaciones de las variables.
Para tal propó sito puedes usar la siguiente funció n.
conArrows <- function(x, y, ...) {
plot(x, y, pch = "", ...)
invisible(sapply(1:length(x),
function(i) arrows(x[i], y[i],
x[i + 1], y[i + 1], ...)))
}
# Datos
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)
# Gráfico de dispersión conectado con flechas
conArrows(x, y)

Personalización
Puedes pasar argumentos a la funció n para personalizar la salida, tal y como se muestra en el
ejemplo siguiente.
conArrows <- function(x, y, ...) {
plot(x, y, pch = "", ...)
invisible(sapply(1:length(x),
function(i) arrows(x[i], y[i],
x[i + 1], y[i + 1], ...)))
}
# Datos
x <- c(1, 2, 3, 4, 5, 4, 7, 8, 9)
y <- c(12, 16, 14, 18, 16, 13, 15, 20, 22)
# Gráfico de dispersión conectado with arrows
conArrows(x, y, angle = 20, length = 0.15, col =
Gráfico de dispersión suavizado con smoothScatter
Para crear un grá fico de dispersió n suavizado en R se puede utilizar la funció n smoothScatter.
Tan solo tienes que pasar una lista de vectores a la funció n y se creará una versió n suavizada
del grá fico de dispersió n.
# Datos
set.seed(9)
x <- rnorm(1000)
y <- rnorm(1000)
# Gráfico de dispersión suavizado
smoothScatter(y ~ x)
# Equivalente a:
smoothScatter(x, y)

Puede que hayas notado que algunos puntos se muestran en el grá fico. Estos puntos se
corresponden con los puntos de las áreas con las densidades regionales menores y son
ú tiles para identificar datos atípicos. El nú mero de puntos se puede personalizar con nrpoints.
# Datos
set.seed(9)
x <- rnorm(1000)
y <- rnorm(1000)

# Gráfico de dispersión suavizado


smoothScatter(y ~ x,
nrpoints = 1000)
Ademá s, el símbolo pch y su color se puede personalizar con los argumentos pch y col.
# Datos
set.seed(9)
x <- rnorm(1000)
y <- rnorm(1000)
# Gráfico de dispersión suavizado
smoothScatter(y ~ x,
pch = 10, col = "red")

Selección de la ventana
La funció n smoothScatter depende de la funció n bkde2D de la librería KernSmooth para
calcular la estimació n tipo nú cleo bidimensional. Sin embargo, puedes establecer la ventana
de suavizado que quieras con el argumento bandwidth.

Ventana grande
Si seleccionas una ventana demasiado grande la estimació n será demasiado suave.
# Datos
set.seed(9)
x <- rnorm(1000)
y <- rnorm(1000)
# Gráfico de dispersión suavizado
smoothScatter(y ~ x,
bandwidth = 0.4) # Ventana grande
Ventana pequeña
Una ventana pequeñ a agrupará los datos demasiado, por lo que la estimació n kernel de la
densidad estará sobreajustada.
# Datos
set.seed(9)
x <- rnorm(1000)
y <- rnorm(1000)
# Gráfico de dispersión suavizado
smoothScatter(y ~ x,
bandwidth = 0.05) # Ventana pequeña

Selección de color
La funció n utiliza la paleta de colores blues9, pero puedes elegir la que quieras
especificá ndola tal y como se muestra en el siguiente ejemplo. Mira la lista de paletas de
colores para buscar inspiració n.
# Datos
set.seed(9)
x <- rnorm(1000)
y <- rnorm(1000)
palette <- hcl.colors(30, palette = "inferno")
# Gráfico de dispersión suavizado
smoothScatter(y ~ x,
colramp = colorRampPalette(palette))

También podría gustarte