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)
}
})
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 )
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.
Guarda el siguiente Script como “Grafico_histograma.R”, el que le permitirá construir histogramas.
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))
}
El Script “Grafico_histograma.R” se utiliza tal como se muestra a continuación.
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
)
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.
Guarda el siguiente Script como “Grafico_histograma.R”, el que le permitirá construir histogramas.
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))
}
El Script “Grafico_barras.R” se utiliza tal como se muestra a continuación.
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
)
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.
Guarda el siguiente Script como “Grafico_lineas.R”, el que le permitirá construir histogramas.
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))
}
El Script “Grafico_lienas.R” se utiliza tal como se muestra a continuación.
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
)
Guarda el siguiente Script como “Tabla.R”, el que le permitirá construir tablas.
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)
}
El Script “Grafico_barras.R” se utiliza tal como se muestra a continuación.
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 |