1) Introducción

El análisis de datos categoricos mediante gráficas de barras, es una herramienta fundamental para la visualización y comprensión de características dentro de una población. En este caso, se emplearon gráficas de barras y de pastel para representar la variable de raza, que en este caso nos permitira saber tipo y frecuencia de esta misma en el conjunto de datos entregado.

2) Configuración

Para comenzar, lo primero que haremos es descargar y cargar todas las librerias necesarias para la creación de las gráficas, además de cargar nuestros datos.

library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(descriptr)

library(ggplot2)

library(datos)

library(forcats)

options(encoding = "UTF-8")

set.seed(2025)

datos.e <- data.frame (id = 1:300,
Raza=sample(c("Blanca","Afrodescendiente","Indígena","Mestiza","Otra"), 
size = 300, replace = TRUE, prob = c(0.4,0.2,0.15,0.2,0.05)),
edad= sample(18:70, size =300, replace= TRUE),
sexo=sample(c("Femenino","Masculino"), size = 300, replace = TRUE))

#tomar muestra de 200

Cada una de las librerias funciona para lo siguiente:

  1. Library(dplyr)

Función: Manejo y transformación de datos

Uso: Filtrar, seleccionar, agrupar, resumir datos

Ejemplo: datos %>% filter(edad > 30) %>% group_by(sexo)

  1. Library(descriptr)

Función: Análisis descriptivo y estadísticas

Uso: Tablas de frecuencia, resúmenes numéricos

Ejemplo: ds_summary_stats(datos$edad)

  1. Library(ggplot2)

Función: Creación de gráficos elegantes

Uso: Gráficos de barras, dispersión, histogramas

Ejemplo: ggplot(datos, aes(x=edad)) + geom_histogram()

  1. Library(datos)

Función: Conjuntos de datos de práctica

Uso: Datos ejemplo para aprender y probar código

Ejemplo: data(“mtcars”) (aunque datos es un paquete en español)

  1. Library(forcats)

Función: Manejo de variables categóricas (factores)

Uso: Ordenar, recodificar niveles de factores

Ejemplo: fct_reorder(raza, frecuencia)

  1. options(encoding = “UTF-8”)

Función: Configura codificación de caracteres

Uso: Permite usar acentos y caracteres especiales (ñ, á, é, í, ó, ú)

Importante: Evita errores con textos en español

  1. set.seed(2025)

Función: Fija la semilla aleatoria

Uso: Reproduce los mismos resultados aleatorios

Ejemplo: Al usar sample() o rnorm() siempre da los mismos resultados

3) Creación de la gráfica de barras

Gráfica de barras para variables de raza

#Tabla de frecuencias
 tabla_raza <- datos.e %>% count(Raza)

#Ordenar por frecuencia descendente

library(ggplot2)
library(dplyr)
library(forcats)


print(tabla_raza)
##               Raza   n
## 1 Afrodescendiente  61
## 2           Blanca 116
## 3         Indígena  57
## 4          Mestiza  53
## 5             Otra  13
str(tabla_raza)
## 'data.frame':    5 obs. of  2 variables:
##  $ Raza: chr  "Afrodescendiente" "Blanca" "Indígena" "Mestiza" ...
##  $ n   : int  61 116 57 53 13
tabla_raza <- tabla_raza %>%
  mutate(Raza = iconv(Raza, to = "UTF-8"))

tabla_raza <- tabla_raza %>% 
  mutate(Raza = fct_reorder(Raza, n))

ggplot(tabla_raza, aes(x = Raza, y = n, fill = Raza)) +
  
  geom_col(width = 0.7) +
  
  geom_text(aes(label = n), vjust = -0.5, size = 4) +
  
  scale_fill_manual(values = c("#C995B7", "#439FB7", "#ACE0B4", "#FFFFC8", "#C4D5FB")) +
  
  labs(title = "Distribucion por Raza",
       
       x = "Categorias de Raza", 
       
       y = "Frecuencia Absoluta") +
  
  ylim(0, max(tabla_raza$n) * 1.1) +  
  
  theme_minimal(base_size = 14) +
  
  theme(plot.title = element_text(hjust = 0.5, face = "bold"),
        
        legend.position = "none")

El código usa una secuencia de funciones especializadas para transformar y visualizar datos categóricos. En primer, dplyr organiza y cuenta las frecuencias de cada categoría, mientras que forcats reordena estos niveles para una presentación más intuitiva. ggplot2 construye el gráfico mediante capas: geom_col genera las barras, geom_text añade las etiquetas numéricas y scale_fill_manual asigna una paleta de colores. labs personaliza títulos y ejes, ylim ajusta los límites del gráfico y theme_minimal aplica un diseño limpio a la estructura. Por ultimo, theme elimina la leyenda y centra el título, creando así una visualización que comunica de manera efectiva la distribución de los datos.

4) Creación de la gráfica de pastel

Gráfica de pastel para variables de raza

tabla_raza <- tabla_raza %>%
  
mutate(prop = n / sum(n) * 100,
       
Raza = paste0(Raza, " (",  round(prop,1), "%)"))

ggplot(tabla_raza, aes(x ="", y = n, fill = Raza)) +
  
geom_bar(stat = "identity", width = 1, color = "white") +
  
coord_polar(theta = "y") +
  
scale_fill_manual(values = c("#C995B7", "#439FB7", "#ACE0B4", "#FFFFC8", "#C4D5FB")) +
  
labs(title = "Distribución de raza (Gráfico de torta)") +
  
theme_void() +

theme(plot.title = element_text(hjust = 0.5, face = "bold"))

2.1 Configuración para gráfica de pastel

Al cambiar el tipo de gráfica, utilizamos distintas lineas de código, tales como:

  1. coord_polar(theta = “y”)

Función: Transforma un gráfico de barras en un gráfico circular (pastel/torta) tomando los valores en el eje Y como proporciones angulares.

  1. x = “” en aes()

Función: Se coloca una cadena vacía en el eje X para que todas las barras se apilen en el mismo punto antes de convertirlas en sectores circulares.

  1. width = 1 en geom_bar()

Función: Define el grosor de cada segmento en el gráfico circular. 1 significa un círculo completo sin espacios.

  1. theme_void()

Función: Elimina todos los ejes, textos y líneas de referencia para que la torta quede limpia y solo se vea el gráfico y las etiquetas.

  1. fill = Raza (ya modificada con porcentajes)

Función: Se reemplaza el nombre original de la categoría por una etiqueta que incluye tanto el nombre de la raza como el porcentaje.

En la construcción de un gráfico circular o de pastel en ggplot2, se emplean varios elementos específicos que lo diferencian de un gráfico de barras tradicional. La función coord_polar(theta = “y”) es importante, ya que transforma las coordenadas cartesianas en polares, utilizando los valores del eje Y para definir los ángulos de cada sector y así dar forma circular al gráfico, para facilitar esta transformación, es común usar x = “” en la estética, lo que colapsa todas las barras en una única posición horizontal antes de convertirlas en sectores, evitando una dispersión innecesaria en el eje X. Se ajusta width = 1 en geom_bar() para garantizar que el grosor de las barras origine un círculo completo sin espacios entre los segmentos. Para lograr un diseño limpio, se aplica theme_void(), el cual elimina ejes, líneas de referencia y etiquetas numéricas, dejando solo el gráfico y sus etiquetas personalizadas. Por ultimo, una modificación importante es enriquecer la variable estética fill para que, en lugar de mostrar solo el nombre de cada categoría, incluya también el porcentaje correspondiente, proporcionando así, información inmediata al observador sin depender de leyendas externas o textos adicionales.

¿Barras o pastel?

La elección entre un gráfico de barras y uno de pastel depende del objetivo de la visualización. El gráfico de barras es ideal para comparar magnitudes entre categorías de manera precisa, ya que su estructura de ejes cartesianos permite al ojo humano discernir fácilmente diferencias de longitud, lo que lo hace superior para analizar valores exactos y rangos amplios de datos. Por otro lado, el gráfico de pastel se especializa en mostrar la proporción de cada categoría respecto a un todo, donde la transformación polar convierte los valores en ángulos y áreas circulares, facilitando una comprensión inmediata de las partes que componen un total. Al final, la desición de que tipo de gráfico utilizar dependera del analista, quien debera considerar, la audiencia junto con el contexto y la naturaleza de los datos.