¡Importante 1!

Previo al uso de la tabla y de los gráficos, es necesario ingresar en el R Markdown el siguiente contador.

contador_grafico <- local({
  contador <- 0
  function() {
    contador <<- contador + 1
    return(contador)
  }
})

contador_tabla <- local({
  contador <- 0
  function() {
    contador <<- contador + 1
    return(contador)
  }
})

¡Importante 2!

La función pivot_wider( ) es fundamental en R cuando queremos reorganizar datos de formato “largo” a “ancho”. En el contexto de análisis de datos, los términos “largo” y “ancho” se refieren a cómo se estructuran las filas y columnas, para ello es necesario ingresar en el R Markdown el siguiente contador.

pivot_wider(names_from = xxxx, values_from =xxxx )

1. Histograma.

1.1. Definición.

Un \(\text{histograma}\) representa la distribución de un conjunto de datos continuos. Muestra cómo se distribuyen los valores en intervalos o “bins”, agrupando los datos en rangos específicos para ver la frecuencia con la que ocurren ciertos valores.

1.2. Función histograma.

Guarda el siguiente Script como “Grafico_histograma.R”, el que le permitirá construir histogramas.

Script
library(grid) 
crear_histograma <- function(datos, columna, titulo = NULL, nombre_eje_x = NULL, nombre_eje_y = NULL, 
                             color_barras = "skyblue", color_borde = "black", 
                             numero_barras = 10, limite_x = NULL, limite_y = NULL) {
  
  numero_grafico <- contador_grafico()
  
  if (is.null(nombre_eje_x)) nombre_eje_x <- "Eje X"
  if (is.null(nombre_eje_y)) nombre_eje_y <- "Eje Y"
  
  p <- ggplot(datos, aes(x = .data[[columna]])) +
    geom_histogram(binwidth = diff(range(datos[[columna]], na.rm = TRUE)) / numero_barras, 
                   fill = color_barras, color = color_borde) +
    labs(x = nombre_eje_x, y = nombre_eje_y, title = "") +
    theme_minimal() +
    theme(
      panel.grid.major = element_blank(),  
      panel.grid.minor = element_blank(),  
      plot.margin = unit(c(1, 1, 1, 1), "lines"),  
      panel.border = element_rect(fill = NA, colour = "black", size = 0.7)  
    )
  
  if (!is.null(limite_x)) {
    p <- p + scale_x_continuous(limits = limite_x)
  }
  if (!is.null(limite_y)) {
    p <- p + scale_y_continuous(limits = limite_y)
  }
  
  print(p)
  
  grafico_titulo <- paste("Gráfico", numero_grafico, ":", titulo)
  grid.text(grafico_titulo, 
            x = 0.01, y = 0.02, hjust = 0, gp = gpar(fontsize = 10))
}

Ejemplo

El Script “Grafico_histograma.R” se utiliza tal como se muestra a continuación.

Uso del Script de histograma
source("Grafico_histograma.R")

crear_histograma(
  datos = flights, # Nombre de la bas de datos.
  columna = "dep_time",  # Columna a analizar
  titulo = "Histograma Personalizado",  # Título del gráfico
  nombre_eje_x = "Hora de salida",  # Nombre del eje x
  nombre_eje_y = "Frecuencia de vuelos",  # Nombre del eje y
  numero_barras = 15,  # Número de barras
  limite_x = c(0, 2500),  # Intervalo del eje x
  limite_y = c(0, 50000),  # Intervalo del eje y
  color_barras = "lightblue"  # Color de las barras
)

2. Gráfico de barras.

2.1. Definición.

Un \(\text{gráfico de barras}\) representa la distribución de un conjunto de datos categóricos o discretos. Muestra cómo se distribuyen los valores en diferentes categorías, utilizando barras para representar la frecuencia o magnitud de cada categoría. Cada barra tiene una altura proporcional a la frecuencia de la categoría correspondiente, permitiendo comparar fácilmente las diferentes categorías o grupos en los datos.

2.2. Función gráfico de barras.

Guarda el siguiente Script como “Grafico_histograma.R”, el que le permitirá construir histogramas.

Script
library(grid) 
library(tidyr)
crear_grafico_barras <- function(datos, titulo = NULL, nombre_eje_x = NULL, nombre_eje_y = NULL, 
                                 colores_relleno , color_borde = "black", 
                                 limite_x = NULL, margen_y = 0.05, agregar_etiquetas = FALSE) {
  
  numero_grafico <- contador_grafico()


  eje_x <- colnames(datos)[1]
  ejes_y <- colnames(datos)[-1]
  
  if (is.null(nombre_eje_x)) nombre_eje_x <- eje_x
  if (is.null(nombre_eje_y)) nombre_eje_y <- "Valores"
  
  tamaño_borde <- 0.3  
  

  datos_long <- datos %>%
    pivot_longer(cols = all_of(ejes_y), names_to = "Variable", values_to = "Valor")
  
 
  max_y <- max(datos_long$Valor, na.rm = TRUE)
  limite_y <- c(0, max_y + margen_y * max_y) 
  
 
  p <- ggplot(datos_long, aes(x = .data[[eje_x]], y = Valor, fill = Variable)) +
    geom_bar(stat = "identity", color = color_borde, size = tamaño_borde, position = position_dodge()) +  
    labs(x = nombre_eje_x, y = nombre_eje_y) +
    scale_fill_manual(values = colores_relleno) +  
    theme_minimal() +
    theme(
      panel.grid.major = element_blank(),  
      panel.grid.minor = element_blank(),  
      plot.margin = unit(c(1, 1, 1, 1), "lines"),  
      panel.border = element_rect(fill = NA, colour = "black", size = 0.7)  
    )
  

  if (agregar_etiquetas) {
    p <- p + geom_text(aes(label = round(Valor, 1)), vjust = -0.5, size = 3, position = position_dodge(0.9))
  }
  

  if (!is.null(limite_x)) {
    p <- p + scale_x_discrete(limits = limite_x)
  }
  

  p <- p + scale_y_continuous(limits = limite_y)
  

  print(p)
  

  grafico_titulo <- paste("Gráfico", numero_grafico, ":", titulo)
  grid.text(grafico_titulo, 
            x = 0.01, y = 0.02, hjust = 0, gp = gpar(fontsize = 10))
}

Ejemplo

El Script “Grafico_barras.R” se utiliza tal como se muestra a continuación.

Uso del Script gráfico de barras
source("Grafico_barras.R")

crear_grafico_barras(
  datos = flights_for_airport_dep_delay, # Nombre de la base de datos.
  titulo = "Retraso promedio por aeropuerto", # Título del gráfico
  nombre_eje_x = "Aeropuerto",  # Nombre del eje x
  nombre_eje_y = "Retraso promedio (minutos)", # Nombre del eje y
  colores_relleno = c("lightblue", "salmon"),  # Colores para cada serie
  color_borde = "black",  # Color del borde de las barras
  agregar_etiquetas = TRUE  # Mostrar etiquetas con los valores
)

3. Gráfico de líneas

3.1. Definición.

Un \(\text{gráfico de líneas}\) representa la tendencia de un conjunto de datos a lo largo de un continuo, como el tiempo u otra variable ordenada. Muestra cómo se comportan los valores de un conjunto de datos conectando puntos correspondientes a cada observación con líneas, permitiendo visualizar cambios, patrones o tendencias a lo largo del tiempo o del eje seleccionado.

3.2. Función gráfico de linea.

Guarda el siguiente Script como “Grafico_lineas.R”, el que le permitirá construir histogramas.

Script
library(ggplot2)
library(dplyr)
library(tidyr)
library(grid) 

crear_grafico_lineas <- function(data, numero_grafico, titulo = "Título del gráfico", nombre_eje_x = "Eje X", nombre_eje_y = "Eje Y", 
                                 line_size = 0.7, add_labels = TRUE) {

  if (ncol(data) < 2) {
    stop("La tabla debe tener al menos dos columnas.")
  }
  
  data_long <- data %>%
    rename(X = 1) %>%
    pivot_longer(cols = -X, names_to = "Variable", values_to = "Valor")
  
  min_valor <- min(data_long$Valor)
  

  p <- ggplot(data_long, aes(x = X, y = Valor, color = Variable, group = Variable)) +
    geom_segment(aes(x = X, xend = X, y = min_valor, yend = Valor), linetype = "dashed", color = "grey") +  
    geom_line(size = line_size) + 
    geom_point() +
    labs(x = nombre_eje_x, y = nombre_eje_y) +  
    theme_minimal() +
    theme(
      panel.border = element_rect(fill = NA, colour = "black", size = 0.7),  
      panel.grid.major = element_blank(),  
      panel.grid.minor = element_blank(),  # Quitar la cuadrícula menor
      plot.margin = unit(c(1, 1, 1, 1), "lines")  # Margen inferior ajustado
    )
  
  if (add_labels) {
    p <- p + geom_text(aes(label = round(Valor, 2)), vjust = -0.5, color = "black", size = 3)  
  }
  

  print(p)
  
  grafico_titulo <- paste("Gráfico", numero_grafico, ":", titulo)
  grid.text(grafico_titulo, 
            x = 0.02, y = 0.02, hjust = 0, gp = gpar(fontsize = 10))
}

Ejemplo

El Script “Grafico_lienas.R” se utiliza tal como se muestra a continuación.

Uso del Script gráfico de lineas
source("Grafico_lineas.R")
crear_grafico_lineas(flights_for_month_dep_delay, # Nombre de la bse de datos.
                     numero_grafico = contador_grafico(), # Contador de gráficos
                     nombre_eje_x = "mes", # Nombre eje x
                     nombre_eje_y = "delay", # Nommbre eje y
                     titulo = "Retraso por mes",
                     line_size = 0.7, # Grosor de las lineas
                     add_labels = TRUE # Mostrar etiquetas con los valores
                     )  

3. Tablas

Guarda el siguiente Script como “Tabla.R”, el que le permitirá construir tablas.

Script
library(flextable)
library(dplyr)

# Función para crear una tabla con flextable
Tabla <- function(tabla, numero_tabla, titulo = "Título de la tabla") {
  # Agregar numeración automática a la tabla
  tabla_numerada <- tabla %>%
    mutate(N = row_number()) %>%
    select(N, everything())
  
  # Identificar columnas numéricas, excluyendo la columna 'N'
  columnas_numericas <- tabla_numerada %>%
    select(where(is.numeric), -N) %>%
    colnames()
  
  # Generar la tabla con flextable
  ft <- flextable(tabla_numerada) %>%
    theme_vanilla() %>%  # Aplicar un tema sencillo
    align(j = "N", align = "left", part = "body") %>%  # Alinear columna N a la izquierda
    align(j = columnas_numericas, align = "center", part = "body") %>%  # Centrar otras columnas numéricas
    align(align = "left", part = "header") %>%  # Alinear títulos de columnas a la izquierda
    fontsize(size = 10, part = "all") %>%  # Ajustar tamaño de fuente para toda la tabla
    autofit()  # Ajustar automáticamente el tamaño

  # Agregar el título de la tabla en la parte inferior
  ft <- add_footer_lines(ft, values = paste("Tabla", numero_tabla, ":", titulo))
  
  return(ft)
}

Ejemplo

El Script “Grafico_barras.R” se utiliza tal como se muestra a continuación.

Uso del Script tabla
source("Tabla.R")

Tabla(flights_for_airport_dep_delay, 
      numero_tabla = contador_tabla(), 
      titulo = "Resumen de estadísticas")

N

origin

mean_flights_for_airport_dep_delay

mean_flights_for_airport_arr_delay

1

EWR

15.10795

9.107055

2

JFK

12.11216

5.551481

3

LGA

10.34688

5.783488

Tabla 1 : Resumen de estadísticas