Capítulo 27 La gramática de los gráficos
La librería ggplot2 del lenguaje R fue desarrollada en el año 2005 por el actual científico en jefe de desarrollo de Posit, la compañía que desarrolló RStudio. Se trata de un estadístico neozelandés que implementó en este paquete, antes de trabajar en Posit, la Gramática de Gráficos de Leland Wilkinson. Divide los gráficos en componentes semánticos como capas y escalas. Hay una implementación similar para Python denominada Letsplot, desarrollada por la compañía Jetbrains. Se presenta a continuación la librería ggplot2 y sus capacidades y después como se puede usar esa misma sintaxis en Letsplot.
Se requerirán las siguientes librerías:
library(dplyr)
library(RColorBrewer)
library(stringr)
library(lubridate)
library(ggthemes)
library(ggrepel)
library(ggpubr)
library(ggeffects)
library(magrittr)
library(tidyverse)
library(scales)
library(ggplot2)
library(patchwork)Importar datos
Los datos fueron bajados del FTP del Instituto Colombiano de Evaluación de la Educación (ICFES).
Ajustar la base de datos
names(data) %<>% tolower()
data$estu_inse_individual <- as.numeric(data$estu_inse_individual)
factores <- c('estu_genero', 'fami_estratovivienda', 'cole_naturaleza',
'cole_bilingue')
data[factores] <- lapply(data[factores], factor)
# table(data$fami_estratovivienda, useNA = 'always')
levels(data$cole_naturaleza) <- c('No oficial', 'Oficial')
levels(data$cole_bilingue) <- c('No', 'Sí')
levels(data$fami_estratovivienda) <- c('1', '2', '3', '4', '5', '6', 'Rural')
data$desemp_ingles %<>% factor(ordered = TRUE,
levels = c("A-", "A1", "A2", "B1", "B+"),
labels = c("A-", "A1", "A2", "B1", "B+"))
data %<>%
mutate(cole_jornada = str_to_title(cole_jornada)) %>%
mutate(cole_area_ubicacion = str_to_title(cole_area_ubicacion))
data$cole_jornada %<>% factor(ordered = TRUE,
levels = c("Unica", "Completa", "Mañana", "Tarde", "Noche", "sabatina"))
data$cole_area_ubicacion %<>% factor()
# table(data$fami_estratovivienda, useNA = 'always')Extraer una muestra más pequeña
set.seed(20250909)
saber <- data %>%
slice_sample(prop = 0.10)
rm(data) # Para no ocupar memoria que no se va a utilizar
saber %<>% select(estu_genero, estu_fechanacimiento, estu_depto_reside,
estu_cod_reside_depto, estu_mcpio_reside,
estu_cod_reside_mcpio, fami_estratovivienda,
cole_naturaleza, cole_genero, cole_calendario, cole_bilingue,
cole_caracter, cole_jornada, cole_cod_mcpio_ubicacion,
cole_mcpio_ubicacion, punt_lectura_critica, punt_matematicas,
punt_c_naturales, punt_sociales_ciudadanas, punt_ingles,
punt_global, desemp_ingles, desemp_lectura_critica,
desemp_matematicas, desemp_c_naturales,
desemp_sociales_ciudadanas, estu_inse_individual,
estu_nse_establecimiento, cole_area_ubicacion)Como ya se mencionó, ggplot2 es un completo y versátil paquete para personalizar todos los aspectos de las gráficas. Se generan gráficas por capas.
La primera capa indica a R que cree la “plantilla”” de la gráfica, y los datos que se utilizarán.
Por ejemplo, para hacer un diagrama de dispersión con el puntaje de matemáticas y el índice socioeconómico individual, se usaría la siguiente estructura:
Presenta el lienzo donde se va a trabajar.
La siguiente capa es aes (aesthetics). Si bien se refiere a la estética visual de los objetos dentro de la gráfica, en primera instancia se utiliza para definir las coordenadas cartesianas:

Presenta el lienzo con los ejes y las coordenadas listos.
La siguiente capa indica el tipo de gráfica, y las características de esa gráfica. Se trata de la selección de la marca.

Dentro del geoma se definen los canales: tamaño, forma o color.
Se puede modificar manualmente o de acuerdo con los valores de una variable.
Por ejemplo, en un diagrama de barras podemos variar las siguientes propiedades estéticas de las barras:
| Nombre argumento | Rol |
|---|---|
| fill | Color del relleno de las barras |
| color | Color del borde de las barras |
| alpha | Nivel de opacidad |
ggplot(data = saber) +
aes(x = fami_estratovivienda) +
geom_bar(fill = "chartreuse4", color = "olivedrab", alpha = 0.2)
Obsérvese que las barras tienen dos atributos fill =, el color de relleno de las barras, col = , el color de la línea externa de las barras. alpha indica el nivel de opacidad.
Colores en R: