R

R

Tutorial R: Gráficos multivariantes en R

Aprende a crear gráficos multivariantes en R usando color, forma, tamaño y transparencia para visualizar múltiples variables eficazmente.

Aprende R y certifícate

Mapeo de tercera variable con color y forma

Cuando trabajamos con datos, a menudo necesitamos visualizar más de dos variables simultáneamente para descubrir patrones complejos. En R, podemos representar una tercera variable (o incluso una cuarta) en un gráfico bidimensional utilizando atributos visuales adicionales como el color y la forma.

Incorporando color para representar una tercera variable

El color es uno de los recursos más intuitivos para añadir una dimensión adicional a nuestros gráficos. Podemos mapear una variable categórica o continua a colores, lo que nos permite identificar patrones que serían invisibles en un gráfico bidimensional simple.

En ggplot2, utilizamos el parámetro color (o colour) dentro de la función aes() para mapear una variable a colores:

# Cargamos las librerías necesarias
library(ggplot2)
library(dplyr)

# Visualizamos el peso y la altura de los pingüinos, coloreando por especie
ggplot(data = palmerpenguins::penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species)) +
  geom_point() +
  labs(title = "Dimensiones del pico por especie de pingüino",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       color = "Especie")

En este ejemplo, cada punto representa un pingüino con su longitud y profundidad de pico, mientras que el color nos permite distinguir instantáneamente a qué especie pertenece cada individuo. Esto nos ayuda a identificar cómo se agrupan las diferentes especies en función de las características de sus picos.

Para variables categóricas, ggplot2 asigna automáticamente colores distintos a cada categoría. Para variables continuas, utiliza una escala de gradiente de color.

# Ejemplo con variable continua mapeada a color
ggplot(data = palmerpenguins::penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = body_mass_g)) +
  geom_point() +
  labs(title = "Dimensiones del pico por masa corporal",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       color = "Masa corporal (g)") +
  scale_color_viridis_c() # Usamos una escala de color perceptualmente uniforme

En este caso, la escala de color nos muestra cómo varía la masa corporal en relación con las dimensiones del pico, permitiéndonos detectar si los pingüinos con picos más grandes tienden a tener mayor masa corporal.

Personalizando las escalas de color

Podemos personalizar las escalas de color para mejorar la interpretabilidad de nuestros gráficos:

# Personalización de colores para variable categórica
ggplot(data = palmerpenguins::penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = species)) +
  geom_point() +
  scale_color_manual(values = c("Adelie" = "#FF5733", 
                               "Chinstrap" = "#33FF57", 
                               "Gentoo" = "#3357FF")) +
  labs(title = "Dimensiones del pico por especie de pingüino",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       color = "Especie")

Para variables continuas, podemos usar diferentes paletas de gradiente:

# Personalización de escala de color para variable continua
ggplot(data = palmerpenguins::penguins, aes(x = bill_length_mm, y = bill_depth_mm, color = body_mass_g)) +
  geom_point() +
  scale_color_gradient(low = "yellow", high = "red") +
  labs(title = "Dimensiones del pico por masa corporal",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       color = "Masa corporal (g)")

Utilizando formas para representar una variable categórica

Además del color, podemos usar diferentes formas para los puntos, lo que resulta especialmente útil para distinguir categorías incluso en impresiones en blanco y negro o para personas con daltonismo.

# Mapeo de variable categórica a formas
ggplot(data = palmerpenguins::penguins, aes(x = bill_length_mm, y = bill_depth_mm, shape = species)) +
  geom_point() +
  labs(title = "Dimensiones del pico por especie de pingüino",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       shape = "Especie")

Las formas solo funcionan bien con variables categóricas y con un número limitado de categorías (ggplot2 tiene 25 formas predefinidas).

Combinando color y forma para representar dos variables adicionales

Para visualizar cuatro variables simultáneamente, podemos combinar color y forma:

# Combinando color y forma para visualizar dos variables categóricas
ggplot(data = palmerpenguins::penguins, aes(x = bill_length_mm, 
                                           y = bill_depth_mm, 
                                           color = species,
                                           shape = sex)) +
  geom_point() +
  labs(title = "Dimensiones del pico por especie y sexo",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       color = "Especie",
       shape = "Sexo")

En este ejemplo, cada punto representa un pingüino con:

  • Posición X: longitud del pico
  • Posición Y: profundidad del pico
  • Color: especie
  • Forma: sexo

Esta combinación nos permite identificar patrones complejos, como si el dimorfismo sexual en las dimensiones del pico varía entre especies.

Mejorando la legibilidad con ajustes adicionales

Cuando mapeamos múltiples variables, es importante asegurarnos de que el gráfico siga siendo legible:

# Mejorando la legibilidad con ajustes adicionales
ggplot(data = palmerpenguins::penguins, aes(x = bill_length_mm, 
                                           y = bill_depth_mm, 
                                           color = species,
                                           shape = sex)) +
  geom_point(size = 3, alpha = 0.7) +  # Puntos más grandes y ligeramente transparentes
  theme_minimal() +  # Tema minimalista para reducir el ruido visual
  labs(title = "Dimensiones del pico por especie y sexo",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       color = "Especie",
       shape = "Sexo")

Consideraciones importantes al mapear múltiples variables

Al representar tres o más variables en un mismo gráfico, debemos tener en cuenta algunas consideraciones prácticas:

  • Sobrecarga visual: Demasiada información puede dificultar la interpretación. Limita el número de variables adicionales.

  • Elección de atributos visuales: El color funciona bien para variables categóricas con pocas categorías o variables continuas. Las formas solo son efectivas para variables categóricas con pocas categorías.

  • Accesibilidad: Considera usar combinaciones de color y forma para hacer tus gráficos accesibles a personas con daltonismo.

  • Interpretabilidad: Asegúrate de que las leyendas y etiquetas sean claras para facilitar la interpretación de todas las dimensiones representadas.

# Ejemplo final con datos reales y buenas prácticas
ggplot(data = na.omit(palmerpenguins::penguins), 
       aes(x = flipper_length_mm, 
           y = body_mass_g, 
           color = species,
           shape = island)) +
  geom_point(size = 3, alpha = 0.7) +
  scale_color_brewer(palette = "Set1") +  # Paleta de colores accesible
  theme_light() +
  labs(title = "Relación entre longitud de aleta y masa corporal",
       subtitle = "Clasificado por especie y isla",
       x = "Longitud de aleta (mm)",
       y = "Masa corporal (g)",
       color = "Especie",
       shape = "Isla")

Este gráfico nos permite analizar simultáneamente cómo se relacionan la longitud de la aleta y la masa corporal de los pingüinos, mientras observamos patrones por especie e isla, todo en una sola visualización clara y efectiva.

Tamaño y transparencia para dimensiones adicionales

Además del color y la forma, existen otros atributos visuales que podemos utilizar para representar variables adicionales en nuestros gráficos. El tamaño y la transparencia (alpha) son dos recursos poderosos que nos permiten visualizar hasta cinco o seis dimensiones simultáneamente en un gráfico bidimensional.

Utilizando el tamaño para representar una variable numérica

El tamaño de los puntos es ideal para representar variables cuantitativas, ya que nuestro cerebro interpreta naturalmente los elementos más grandes como valores mayores. En ggplot2, mapeamos una variable al tamaño de los puntos mediante el parámetro size dentro de aes():

# Cargamos las librerías necesarias
library(ggplot2)
library(palmerpenguins)

# Visualizamos longitud y profundidad del pico, con tamaño según masa corporal
ggplot(data = penguins, aes(x = bill_length_mm, 
                           y = bill_depth_mm, 
                           size = body_mass_g)) +
  geom_point(alpha = 0.7) +
  labs(title = "Dimensiones del pico y masa corporal",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       size = "Masa corporal (g)")

En este ejemplo, cada punto representa un pingüino donde:

  • Posición X: longitud del pico
  • Posición Y: profundidad del pico
  • Tamaño: masa corporal

Esta visualización nos permite identificar rápidamente si los pingüinos con determinadas dimensiones de pico tienden a tener mayor o menor masa corporal.

Personalizando la escala de tamaño

Por defecto, ggplot2 asigna tamaños que pueden no ser óptimos para nuestros datos. Podemos ajustar el rango de tamaños para mejorar la legibilidad:

ggplot(data = penguins, aes(x = bill_length_mm, 
                           y = bill_depth_mm, 
                           size = body_mass_g)) +
  geom_point(alpha = 0.7) +
  scale_size_continuous(range = c(1, 8)) +  # Ajustamos el rango de tamaños
  labs(title = "Dimensiones del pico y masa corporal",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       size = "Masa corporal (g)")

También podemos transformar la escala para destacar mejor las diferencias:

ggplot(data = penguins, aes(x = bill_length_mm, 
                           y = bill_depth_mm, 
                           size = body_mass_g)) +
  geom_point(alpha = 0.7) +
  scale_size_area() +  # Escala proporcional al área, no al radio
  labs(title = "Dimensiones del pico y masa corporal",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       size = "Masa corporal (g)")

Transparencia (alpha) para visualizar densidad o incertidumbre

La transparencia (controlada por el parámetro alpha) es especialmente útil para:

  1. Visualizar la densidad de puntos en áreas congestionadas
  2. Representar incertidumbre o confianza en los datos
  3. Reducir la sobrecarga visual cuando hay muchos puntos

Podemos asignar un valor fijo de transparencia:

ggplot(data = penguins, aes(x = bill_length_mm, y = bill_depth_mm)) +
  geom_point(alpha = 0.3) +  # Todos los puntos con 70% de transparencia
  labs(title = "Dimensiones del pico con transparencia fija",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)")

O mapear una variable a la transparencia:

ggplot(data = penguins, aes(x = bill_length_mm, 
                           y = bill_depth_mm, 
                           alpha = body_mass_g)) +
  geom_point() +
  labs(title = "Dimensiones del pico con transparencia variable",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       alpha = "Masa corporal (g)")

Combinando múltiples dimensiones en un solo gráfico

La verdadera potencia de estos atributos visuales se manifiesta cuando los combinamos para visualizar múltiples variables simultáneamente:

# Visualizando 5 variables en un solo gráfico
ggplot(data = na.omit(penguins), 
       aes(x = bill_length_mm, 
           y = bill_depth_mm, 
           color = species,
           size = body_mass_g,
           alpha = flipper_length_mm)) +
  geom_point() +
  labs(title = "Análisis multidimensional de pingüinos",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       color = "Especie",
       size = "Masa corporal (g)",
       alpha = "Longitud de aleta (mm)")

En este ejemplo estamos visualizando:

  • Posición X: longitud del pico
  • Posición Y: profundidad del pico
  • Color: especie
  • Tamaño: masa corporal
  • Transparencia: longitud de aleta

Estrategias para evitar la sobrecarga visual

Aunque podemos representar múltiples variables, debemos evitar la sobrecarga visual que dificulta la interpretación:

# Versión mejorada con ajustes para reducir la sobrecarga visual
ggplot(data = na.omit(penguins), 
       aes(x = bill_length_mm, 
           y = bill_depth_mm, 
           color = species,
           size = body_mass_g)) +
  geom_point(alpha = 0.7) +  # Transparencia fija para todos los puntos
  scale_size_continuous(range = c(2, 6)) +  # Rango de tamaños más limitado
  scale_color_brewer(palette = "Set1") +  # Paleta de colores distinguible
  theme_minimal() +  # Tema minimalista
  labs(title = "Características morfológicas de pingüinos",
       x = "Longitud del pico (mm)",
       y = "Profundidad del pico (mm)",
       color = "Especie",
       size = "Masa corporal (g)")

Casos de uso específicos para tamaño y transparencia

El tamaño es particularmente útil para:

  • Variables que representan magnitudes (población, ingresos, masa)
  • Destacar valores extremos o de interés especial
  • Representar importancia relativa de observaciones
# Ejemplo con datos de mtcars para mostrar cilindrada y potencia
ggplot(data = mtcars, aes(x = wt, y = mpg, size = disp)) +
  geom_point(alpha = 0.7) +
  labs(title = "Relación entre peso y consumo de combustible",
       subtitle = "Tamaño de los puntos representa la cilindrada del motor",
       x = "Peso (1000 lbs)",
       y = "Millas por galón",
       size = "Cilindrada (cu.in.)")

La transparencia es especialmente efectiva para:

  • Visualizar distribuciones con muchos puntos superpuestos
  • Indicar grado de certeza en los datos
  • Reducir el ruido visual en gráficos densos
# Generamos datos sintéticos con muchos puntos
set.seed(123)
muchos_puntos <- data.frame(
  x = rnorm(5000),
  y = rnorm(5000),
  confianza = runif(5000)
)

# Visualizamos con transparencia para mostrar densidad
ggplot(muchos_puntos, aes(x = x, y = y, alpha = confianza)) +
  geom_point(size = 1) +
  labs(title = "Distribución de puntos con nivel de confianza variable",
       x = "Eje X",
       y = "Eje Y",
       alpha = "Nivel de confianza")

Consideraciones prácticas al usar tamaño y transparencia

Al trabajar con estos atributos visuales, debemos tener en cuenta:

  • El tamaño funciona mejor con variables continuas y con un rango limitado de valores
  • La superposición de puntos grandes puede ocultar patrones importantes
  • La transparencia puede ser difícil de percibir con precisión en valores intermedios
  • Combinar demasiados atributos visuales puede crear gráficos difíciles de interpretar
# Ejemplo equilibrado con cuatro variables
ggplot(data = na.omit(penguins), 
       aes(x = flipper_length_mm, 
           y = body_mass_g, 
           color = species,
           size = bill_length_mm)) +
  geom_point(alpha = 0.7) +
  scale_size_continuous(range = c(1, 5)) +
  theme_light() +
  labs(title = "Relación entre longitud de aleta y masa corporal",
       subtitle = "Con información adicional sobre especie y longitud del pico",
       x = "Longitud de aleta (mm)",
       y = "Masa corporal (g)",
       color = "Especie",
       size = "Longitud del pico (mm)")

Este enfoque equilibrado nos permite analizar relaciones complejas entre variables sin sacrificar la claridad visual, facilitando la identificación de patrones que serían imposibles de detectar en gráficos más simples.

Aprende R online

Otros ejercicios de programación de R

Evalúa tus conocimientos de esta lección Gráficos multivariantes en R con nuestros retos de programación de tipo Test, Puzzle, Código y Proyecto con VSCode, guiados por IA.

Todas las lecciones de R

Accede a todas las lecciones de R y aprende con ejemplos prácticos de código y ejercicios de programación con IDE web sin instalar nada.

Instalación De R Y Rstudio

R

Introducción Y Entorno

Introducción A R

R

Introducción Y Entorno

Operadores

R

Sintaxis

Estructuras De Datos

R

Sintaxis

Funciones

R

Sintaxis

Estructuras De Control Iterativo

R

Sintaxis

Scopes Y Closures

R

Sintaxis

Estructuras De Control Condicional

R

Sintaxis

Funciones Anónimas

R

Sintaxis

Tipos De Datos Y Variables

R

Sintaxis

Sistema R6: Clases Referenciales Y Encapsulamiento

R

Programación Orientada A Objetos

Sistema S4: Clases Formales Y Validación

R

Programación Orientada A Objetos

Herencia Y Polimorfismo En R

R

Programación Orientada A Objetos

Sistemas De Oop En R

R

Programación Orientada A Objetos

Sistema S3: Clases Implícitas Y Métodos Genéricos

R

Programación Orientada A Objetos

Tidyverse Para Transformación De Datos

R

Manipulación De Datos

Lubridate Para Fechas Y Tiempo

R

Manipulación De Datos

Group_by Y Summarize Para Agrupación Y Resumen

R

Manipulación De Datos

Stringr Para Expresiones Regulares

R

Manipulación De Datos

Tidyr Para Limpieza De Valores Faltantes

R

Manipulación De Datos

Joins En R Para Combinación Y Relaciones De Tablas

R

Manipulación De Datos

Pivot_longer Y Pivot_wider Para Reestructuración

R

Manipulación De Datos

Mutate Y Transmute Para Transformación

R

Manipulación De Datos

Dplyr Para Filtrado Y Selección

R

Manipulación De Datos

Readr Y Read.csv Para Importar Datos

R

Manipulación De Datos

Gráficos Bivariantes En R

R

Visualización De Datos

Gráficos Univariantes En R

R

Visualización De Datos

Facetas En Ggplot2

R

Visualización De Datos

Personalización Y Temas

R

Visualización De Datos

Ggplot2 Para Visualización De Datos

R

Visualización De Datos

Gráficos Multivariantes En R

R

Visualización De Datos

Correlación En R

R

Estadística

Regresión Lineal En R

R

Estadística

Pruebas De Hipótesis En R

R

Estadística

Anova En R

R

Estadística

Estadística Descriptiva En R

R

Estadística

Accede GRATIS a R y certifícate

En esta lección

Objetivos de aprendizaje de esta lección

  • Comprender cómo mapear una tercera variable en gráficos bidimensionales usando color y forma.
  • Aprender a personalizar escalas de color para variables categóricas y continuas en ggplot2.
  • Utilizar tamaño y transparencia para representar variables adicionales y mejorar la visualización multidimensional.
  • Identificar buenas prácticas para evitar la sobrecarga visual y mejorar la legibilidad de gráficos multivariantes.
  • Aplicar combinaciones de atributos visuales para analizar patrones complejos en conjuntos de datos reales.