ggplot2 (I): Gramática de gráficos, tu primer Plot

Iniciación a ggplot2: Guía para crear visualizaciones en R

Author

Roberto Gil-Saura

Published

September 5, 2025

Introducción

Bienvenido a la primera entrega de nuestra serie sobre ggplot2. Si eres nuevo en R / Rstudio o Quarto, es más que probable que hayas oído hablar de este paquete. Es, sin duda, la herramienta de visualización de datos más popular y potente del ecosistema de R, y por una buena razón: no solo crea gráficos estéticamente impresionantes, sino que, lo más importante y trascendente, te obliga a pensar en la visualización de datos de una manera más estructurada y lógica.

Muchos programas de software te presentan una galería de tipos de gráficos (barras, líneas, tartas…) y te piden que elijas uno. ggplot2 adopta un enfoque diferente. En lugar de ofrecer un menú rígido, te proporciona un conjunto de “bloques de construcción por capas” que puedes combinar para crear casi cualquier tipo de gráfico que puedas imaginar.

Este enfoque se llama la Gramática de los Gráficos (del inglés, Grammar of Graphics), un concepto desarrollado por Leland Wilkinson. La idea es que un gráfico estadístico es un mapeo de los datos a atributos estéticos (color, forma, tamaño) de objetos geométricos (puntos, líneas, barras).

No te preocupes si esto suena demasiado abstracto. La grandeza de ggplot2 es que transforma esta poderosa idea en un código sorprendentemente intuitivo. En este post, vamos a desglosar los tres componentes fundamentales de cualquier ggplot y construiremos nuestro primer gráfico paso a paso.

Los tres componentes esenciales de un gráfico ggplot

Para empezar, olvida los gráficos complejos. Todo gráfico en ggplot2, desde el más simple hasta el más elaborado, se construye a partir de tres componentes básicos que se combinan con el signo +.

  1. Los Datos (data = dataframe_de_usuario): La base de todo. Es el dataframe que contiene la información que quieres visualizar. ggplot2 está diseñado para trabajar con datos en formato “tidy” (ordenado), donde cada fila es una observación y cada columna es una variable.
  2. Las Estéticas (mapping=aes() - aesthetics): Aquí es donde le dices a ggplot2 cómo mapear las variables de tus datos a las propiedades visuales del gráfico. Por ejemplo:
    • Mapea (representa) la variable “edad” al eje X.
    • Mapea la variable “ingresos” al eje Y.
    • Mapea la variable “género” al color.
  3. Las Geometrías (geom_*el que sea* - geometric objects): Son los “objetos” que realmente ves en el gráfico. Determinan el tipo de gráfico que estás creando.
    • geom_point() crea un diagrama de dispersión.
    • geom_line() crea un gráfico de líneas.
    • geom_bar() crea un gráfico de barras.

La estructura básica de cualquier código ggplot2 siempre será:

ggplot(data = <TUS_DATOS>, mapping = aes(<MAPEADOS_ESTÉTICOS>)) + <UNA_O_MÁS_GEOMETRÍAS>()

Una vez que interiorices esta estructura, el mundo de la visualización en R se abrirá ante ti.

Manos a la obra: Nuestro primer ggplot

Basta de teoría. Vamos a crear nuestro primer gráfico. Para ello, usaremos uno de los conjuntos de datos más famosos para la enseñanza en R: mpg. Este dataset viene incluido en ggplot2 y contiene información sobre el consumo de combustible de diferentes modelos de coches.

Paso 1: Cargar las librerías y explorar los datos

Primero, necesitamos cargar el paquete tidyverse, que incluye ggplot2 y otras herramientas muy útiles como dplyr para la manipulación de datos.

Code
# Cargar la librería tidyverse (que incluye ggplot2)
# lo hacemos así, porque uchas veces el uso de ggplot2 conlleva usar dplyr o tidyr
# que también forman parte del universo R

library(tidyverse)

# Echar un primer vistazo al dataset mpg
# 'glimpse' es una forma mejorada de ver la estructura de un dataframe (por ejemplo, función de dplyr)
glimpse(mpg)
Rows: 234
Columns: 11
$ manufacturer <chr> "audi", "audi", "audi", "audi", "audi", "audi", "audi", "…
$ model        <chr> "a4", "a4", "a4", "a4", "a4", "a4", "a4", "a4 quattro", "…
$ displ        <dbl> 1.8, 1.8, 2.0, 2.0, 2.8, 2.8, 3.1, 1.8, 1.8, 2.0, 2.0, 2.…
$ year         <int> 1999, 1999, 2008, 2008, 1999, 1999, 2008, 1999, 1999, 200…
$ cyl          <int> 4, 4, 4, 4, 6, 6, 6, 4, 4, 4, 4, 6, 6, 6, 6, 6, 6, 8, 8, …
$ trans        <chr> "auto(l5)", "manual(m5)", "manual(m6)", "auto(av)", "auto…
$ drv          <chr> "f", "f", "f", "f", "f", "f", "f", "4", "4", "4", "4", "4…
$ cty          <int> 18, 21, 20, 21, 16, 18, 18, 18, 16, 20, 19, 15, 17, 17, 1…
$ hwy          <int> 29, 29, 31, 30, 26, 26, 27, 26, 25, 28, 27, 25, 25, 25, 2…
$ fl           <chr> "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p", "p…
$ class        <chr> "compact", "compact", "compact", "compact", "compact", "c…

Como puedes ver, mpg contiene variables (columnas) como displ (cilindrada del motor en litros), hwy (consumo en autopista, en millas por galón) y class (tipo de coche, como “compacto” o “SUV”).

Paso 2: Construir el gráfico capa por capa

Nuestra pregunta de investigación será: “¿Existe una relación entre la cilindrada del motor (displ) y el consumo de combustible en autopista (hwy)?”.

Un diagrama de dispersión es perfecto para explorar esta relación. Vamos a construirlo siguiendo nuestra gramática.

1. La capa base: Datos y Estéticas

Empezamos creando el lienzo del gráfico. Le decimos a ggplot() que use los datos mpg y que mapee displ al eje X y hwy al eje Y.

Code
# Creamos el objeto ggplot base
# Todavía no veremos ningún punto, solo los ejes y el fondo
ggplot(data = mpg, mapping = aes(x = displ, y = hwy))

¡No te asustes! Es normal que solo veas un lienzo en blanco con los ejes. Hemos definido el mapeo, pero no le hemos dicho a ggplot2 qué tipo de objeto geométrico usar para representar esa relación.

2. Añadir la capa de Geometría

Ahora, le añadimos una capa de geometría usando el signo +. Como queremos un diagrama de dispersión, usaremos geom_point().

Code
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
  geom_point()

Nuestro primer diagrama de dispersión con ggplot2.

¡Felicidades! Acabas de crear tu primer gráfico con ggplot2.

La interpretación es inmediata: a medida que aumenta la cilindrada del motor (eje X), el consumo de combustible en autopista (eje Y) tiende a disminuir. Es una relación negativa, como era de esperar: motores más grandes consumen más combustible (lo que se traduce en menos millas por galón).

Paso 3: Añadiendo una tercera dimensión con color

¿Y si quisiéramos ver si esta relación cambia según el tipo de coche (class)? Podemos añadir una tercera variable a nuestro mapeo estético. Mapeemos la variable class al atributo color.

Para ello, simplemente añadimos color = class dentro de la función aes().

Code
ggplot(data = mpg, mapping = aes(x = displ, y = hwy, color = class)) +
  geom_point()

Diagrama de dispersión con una tercera variable mapeada al color.

Y aquñi está. ggplot2 ha hecho varias cosas automáticamente por nosotros:

  1. Ha asignado un color único a cada categoría de la variable class. Dejemos la elección de colores para más adelante.
  2. Ha coloreado cada punto según su clase.
  3. Ha creado una leyenda para que podamos interpretar los colores.

Ahora podemos ver matices que antes estaban ocultos. Por ejemplo, los coches de 2 plazas (2seater) tienden a tener motores muy grandes pero también un consumo relativamente eficiente para su tamaño, mientras que los SUV y las camionetas (pickup) tienen un rendimiento mucho peor.

Conclusión y próximos pasos

En este primer post de la serie, hemos dado el paso más importante: hemos entendido la lógica fundamental detrás de ggplot2 y hemos construido nuestro primer gráfico. Hemos aprendido que cada ggplot se compone de datos, estéticas y geometrías.

Has visto lo fácil que es empezar con un gráfico simple y añadirle complejidad de forma incremental, simplemente añadiendo nuevas capas o mapeos. Esta flexibilidad es lo que hace que ggplot2 sea una herramienta tan poderosa.

En nuestro próximo post, utilizaremos esta misma lógica para construir los tres tipos de gráficos más comunes en el análisis de datos: barras, líneas e histogramas. ¡Te esperamos!


Este post es parte de la serie “Iniciación a ggplot2: Guía para crear visualizaciones en R”.

  • Post 1: La Gramática de los Gráficos y Tu Primer Plot
  • Post 2 (Próximamente): Los Gráficos Esenciales - Barras, Líneas e Histogramas
  • Post 3 (Próximamente): Dando Vida a tus Visualizaciones con Colores, Etiquetas y Títulos
  • Post 4 (Próximamente): Divide y Vencerás - Contando Historias Complejas con Facetas