_________________________________________________________________________________________________________________________


1 Componentes de la gramática de gráficos

Al crear un gráfico con el paquete {ggplot2}, encontramos tres componentes esenciales que forman la base de cualquier gráfico:

  1. data: Es el conjunto de datos que contiene las variables de interés.

  2. aes (estética): Son los atributos visuales del gráfico, como la posición en los ejes x e y, el color, la forma y el tamaño de los elementos. Los atributos estéticos se asignan a las variables del conjunto de datos, permitiendo que estas se muestren visualmente en el gráfico.

  3. geom (objeto geométrico): Es el tipo de objeto que se muestra en el gráfico. Se refiere al tipo de representación gráfica que vamos a utilizar, como puntos, líneas, barras, cajas, entre otros.

Todo gráfico empieza con la función ggplot() que requiere como mínimo los siguientes componentes:

  • El marco de datos: Se especifica en el argumento data, donde están las variables a graficar.
  • El mapeo de las variables a las estéticas: En el argumento aes(), donde se asignan las variables a los atributos visuales como posición, color, tamaño, etc.

Después de especificar estos componentes esenciales, podemos agregar capas a la visualización usando el operador +.

#Ejemplo
ggplot(data = BASE_DE_DATOS, aes(x, y)) + 
  geom_point()


1.1 Otros componentes

  • Facetas (facet): Permiten dividir un gráfico en múltiples subgráficos basados en una o más variables, proporcionando una visualización más clara de la distribución de los datos.

  • Temas (themes): Permiten personalizar el estilo y diseño del gráfico, como el color del fondo, la fuente de los títulos, los tamaños de las etiquetas, etc.

Además, podemos añadir otras capas:

  • Título del gráfico: Usando ggtitle().
  • Etiquetas de los ejes: Usando labs().


2 Gráficos

El paquete ofrece una amplia variedad de gráficos que permiten representar adecuadamente las variables en estudio. Nos centraremos en siete tipos de gráficos fundamentales que permiten visualizar y explorar datos tanto categóricos como numéricos. Estos son:

  • Diagramas de dispersión

  • Gráfico de líneas

  • Histogramas

  • Polígono de frecuencias

  • Gráfico de cajas

  • Gráfico de barras

  • Gráfico de barras apiladas

A continuación desarrollaremos cada uno de ellos, siguiendo el flujo de trabajo:


2.1 Activamos paquetes

library(tidyverse)
library(readxl)

2.2 Cargamos la base de datos “iris”

iris

2.3 Ordenamos la base de datos

IRIS <- iris %>% 
  rename(Longitud.Sepalo = Sepal.Length,
         Ancho.Sepalo = Sepal.Width,
         Longitud.Petalo = Petal.Length,
         Ancho.Petalo = Petal.Width,
         ESPECIE = Species)
glimpse(IRIS)

3 Diagramas de dispersión

Los gráficos de dispersión o scatter plots se utilizan para mostrar la relación entre dos variables cuantitativas continuas, donde cada observación está representada por un punto.

  • función: geom_point()
ggplot(IRIS, aes(Longitud.Petalo, Ancho.Petalo)) +
  geom_point()

Podemos reemplazar los puntos por diferentes formas en el gráfico de dispersión utilizando “shape =”, como se en la figura siguuiente:

ggplot(IRIS, aes(Longitud.Petalo, Ancho.Petalo)) +
  geom_point(shape = 25, fill = "yellow") # Para las formas 21 a 25, `fill =` controla el color de relleno de la forma.

También es posible modificar el tamaño de la forma seleccionada con “size =

ggplot(IRIS, aes(Longitud.Petalo, Ancho.Petalo)) +
  geom_point(size = 4)

El color de la forma puede ser seleccionado con “color =

En el siguiente sitio web podrás encontrar una lista de colores disponibles:

colores

ggplot(IRIS, aes(Longitud.Petalo, Ancho.Petalo)) +
  geom_point(color = "red")

Combinamos atributos

ggplot(IRIS, aes(Longitud.Petalo, Ancho.Petalo, shape = ESPECIE, color = ESPECIE)) +
  geom_point(size= 3)


4 Gráfico de líneas

Los gráficos de líneas se utilizan típicamente para visualizar cómo una variable continua, en el eje y, cambia en relación con otra variable continua, generalmente vinculadas al tiempo(horas, meses, años, etc.), en el eje x.

Función: geom_line()

Para elaborar el gráfico de líneas vamos a trabajar con la base de datos denominada “PP_77_22” que contine los datos de precipitación obtenidos en el periodo 1977-2022.

PP_77_22 <- read_excel("PP_77_22.xlsx")
glimpse(PP_77_22)
## Rows: 46
## Columns: 2
## $ ANIO <dbl> 1977, 1978, 1979, 1980, 1981, 1982, 1983, 1984, 1985, 1986, 1987,…
## $ PP   <dbl> 666.4, 553.2, 675.7, 532.4, 528.7, 410.9, 569.2, 484.0, 610.2, 37…
ggplot(PP_77_22, aes(ANIO, PP)) +
  geom_line()

Renombramos variables

PP_77_22 <- PP_77_22 %>% 
  rename(AÑO = ANIO,
         PRECIPITACION = PP)

Visualizamos

PP_77_22
## # A tibble: 46 × 2
##      AÑO PRECIPITACION
##    <dbl>         <dbl>
##  1  1977          666.
##  2  1978          553.
##  3  1979          676.
##  4  1980          532.
##  5  1981          529.
##  6  1982          411.
##  7  1983          569.
##  8  1984          484 
##  9  1985          610.
## 10  1986          379.
## # ℹ 36 more rows

Tengamos en cuenta que podemos modificar tanto el tipo como el ancho de las líneas en el gráfico.

Tipos de línea: Podemos elegir entre diferentes estilos, como líneas continuas, discontinuas o punteadas.

Ancho de línea: Es posible también ajustar el grosor de la línea para destacar o suavizar su apariencia.

Combinamos ambos argumentos…

ggplot(PP_77_22, aes(AÑO, PRECIPITACION)) +
  geom_line(color = "blue", linetype = 3, lwd = 1 )


5 Histogramas

Un histograma es un gráfico utilizado para representar la distribución de una variable numérica. Este tipo de gráfico divide el rango de los datos en intervalos (llamados “bins”) y muestra la frecuencia con la que los valores se ubican dentro de cada intervalo.

Función: geom_histogram()

Al observar un histograma, es importante plantearse las siguientes preguntas para interpretar correctamente los datos:

  • ¿Cuáles son los valores más pequeños y los más grandes?
  • ¿Dónde se encuentra el valor “central” o el “más típico”?
  • ¿Cómo se distribuyen los valores a lo largo del rango de la variable?
  • ¿Cuáles son los valores más frecuentes y cuáles los menos frecuentes?
ggplot(PP_77_22, aes(PRECIPITACION)) +
  geom_histogram()
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Cambiamos color de los contenedores.

ggplot(PP_77_22, aes(PRECIPITACION)) +
  geom_histogram(color = "yellow")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Modificamos color y relleno de los contenedores.

ggplot(PP_77_22, aes(PRECIPITACION)) +
  geom_histogram(color = "yellow", fill = "darkgreen")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

A continuación pueden ver los nombres de algunos colores con la función colors()

colors()


5.1 Ajuste de los contenedores

Podemos ajustar los contenedores siguiendo dos criterios:

  1. Ajustando el número de bins a través del argumento bins. Usando este método especificamos el número de contenedores.
ggplot(PP_77_22, aes(PRECIPITACION)) +
  geom_histogram(bins = 8, color = "gray", fill = "lightblue") +
  theme_classic()

  1. Ajustando el ancho de los contenedores a través del argumento binwidth. Con el segundo método, en lugar de especificar el número de bins, especificamos el ancho de los bins. Por ejemplo, establezcamos el ancho de cada contenedor en cien milímetros.
ggplot(PP_77_22, aes(PRECIPITACION)) +
  geom_histogram(binwidth = 100, color = "red", fill = "blue") +
  theme_classic()

Actividad

  1. Realice un gráfico de líneas para el periodo 2000 - 2022.
#AYUDA PARA SELECCIONAR EL PERIODO DE AÑOS DESEADO
PP_00_22 <- PP_77_22 %>%
  filter(AÑO >= 2000 & AÑO <= 2022)
PP_00_22
## # A tibble: 23 × 2
##      AÑO PRECIPITACION
##    <dbl>         <dbl>
##  1  2000          548.
##  2  2001          463 
##  3  2002          552.
##  4  2003          239 
##  5  2004          338 
##  6  2005          279.
##  7  2006          263.
##  8  2007          301.
##  9  2008          481 
## 10  2009          339.
## # ℹ 13 more rows
  1. Calcule la precipitación promedio para dicho periodo.
PP_00_22 %>%
  filter(AÑO >= 2000 & AÑO <= 2022) %>% 
  summarise(mean(PRECIPITACION))
## # A tibble: 1 × 1
##   `mean(PRECIPITACION)`
##                   <dbl>
## 1                  415.
  1. Elabore un gráfico de líneas para dicho periodo e incluya una línea de corte horizontal con la función: para el valor de la media.
ggplot(PP_00_22, aes(AÑO, PRECIPITACION)) +
  geom_line(color = "blue") +
  geom_hline(yintercept = 414.55, color = "red")

  1. Elabore un gráfico de líneas para dicho periodo e incluya una línea de corte horizontal con la función: para el valor de la media.
ggplot(PP_00_22, aes(PRECIPITACION)) +
  geom_histogram(binwidth = 50, color = "gray")+
  geom_vline(xintercept = 414.55, color = "red")


6 Polígono de frecuencias

El polígono de frecuencias es una alternativa al histograma que representa la distribución de una variable numérica mediante una línea que conecta los puntos medios o marcas de clase de los intervalos. Esto permite visualizar la forma general de la distribución de los datos de manera continua, facilitando comparaciones entre conjuntos de datos.

Función: geom_freqpoly()

Al analizar un polígono de frecuencias, es útil considerar las siguientes preguntas:

  • ¿Cuáles son los valores más bajos y más altos?
  • ¿Dónde se encuentra el “pico” o valor más común?
  • ¿Cómo varían los valores a lo largo del rango?
  • ¿Existen múltiples picos (modas) o patrones de distribución?
  • ¿Cómo se distribuyen las frecuencias de manera general?
ggplot(PP_77_22, aes(PRECIPITACION)) + 
  geom_freqpoly(binwidth = 100)

Combinamos un histograma con un polígono de frecuencias

ggplot(PP_77_22, aes(PRECIPITACION)) +
  geom_histogram(binwidth = 100, color = "yellow") +
  geom_freqpoly(binwidth = 100, color = "red", linewidth = 1.5)


7 Gráfico de cajas

El gráfico de cajas o boxplot, es una herramienta útil para representar la distribución de una variable cuantitativa. Se construye a partir del resumen de cinco números: el valor mínimo, el primer cuartil (Q1), la mediana (Q2), el tercer cuartil (Q3) y el valor máximo. Además, los boxplots pueden identificar posibles valores atípicos, proporcionando una visión clara de la dispersión y la simetría de los datos.

Función: geom_boxplot()

Al interpretar un gráfico de cajas, es útil hacerse las siguientes preguntas:

  • ¿Cuál es la mediana y cómo se compara con los cuartiles?
  • ¿El gráfico está sesgado hacia un lado (asimetría) o es simétrico?
  • ¿Existen valores atípicos (outliers) y cuántos hay?
  • ¿Cuál es el rango intercuartílico (IQR) y qué nos indica sobre la dispersión de los datos?

Eleaboramos los gráficos usando la base de datos “MANDARINAS_2024” obtenida por los estudiantes que cursaron la asignatura Estadística y Biometría durante el año 2024.

MANDARINAS <- read_excel("MANDARINAS_2024.xlsx")
str(MANDARINAS)
## tibble [419 × 8] (S3: tbl_df/tbl/data.frame)
##  $ N            : num [1:419] 1 2 3 4 5 6 7 8 9 10 ...
##  $ GRUPO        : num [1:419] 1 1 1 1 1 1 1 1 1 1 ...
##  $ VARIEDAD     : chr [1:419] "Clementina" "Clementina" "Clementina" "Clementina" ...
##  $ N_DE_FRUTO   : num [1:419] 19 9 21 8 4 30 22 23 17 27 ...
##  $ PESO         : num [1:419] 101 122 127 126 37 139 140 130 138 142 ...
##  $ DIAM_ECUAT   : num [1:419] 64.2 64.2 64.7 64.9 65.9 66.4 67.1 67.5 68.2 68.2 ...
##  $ NIVEL_DE_DAÑO: num [1:419] 1 0 3 3 2 2 3 1 2 2 ...
##  $ COLOR        : num [1:419] 4 5 4 1 5 4 4 3 3 4 ...
ggplot(MANDARINAS, aes(DIAM_ECUAT, VARIEDAD)) +
  geom_boxplot()

ggplot(MANDARINAS, aes(DIAM_ECUAT, VARIEDAD, color = VARIEDAD)) + 
  geom_boxplot()

¿Y si agregamos la media muestral?

ggplot(MANDARINAS, aes(DIAM_ECUAT, VARIEDAD, color = VARIEDAD)) + 
  geom_boxplot() +
  stat_summary(fun = mean, color = "black") # función para agregar la media muestral y asignarle color
## Warning: Removed 2 rows containing missing values or values outside the scale range
## (`geom_segment()`).

Actividad

Elaboramos un boxplot para la variable “peso” en función de cada “grupo”.

ggplot(MANDARINAS, aes(x = factor(GRUPO), y = PESO, fill = factor(GRUPO))) +
  geom_boxplot() 


8 Gráfico de barras

Cuando es de interés visualizar la distribución de una variable categórica debemos realizar un conteo de las diferentes categorías que observamos en una variable cualitativa o categórica(nominal u ordinal) o en una variable cuantitativa discreta. A menudo, la mejor manera de visualizar estos diferentes recuentos, también llamadas frecuencias, es a travéz de un gráfico de barras.

Sin embargo, una complicación es cómo se representan sus datos. ¿La variable categórica de interés está “precontada” o no? Dependiendo de cómo se representen sus datos categóricos, tendrá que agregar un tipo de capa geométrica diferente a su ggplot() para crear el gráfico.


8.1 Barplots via geom_bar or geom_col

Según se representen los datos categóricos (precontados o no), debemos agregar una capa diferente. Así, cuando la variable categórica cuya distribución quieres visualizar:

_ No está precontado en su marco de datos, usamos geom_bar().

_ Está precontado en su marco de datos, usamos geom_col() con la estética de la posición y asignada a la variable que tiene los recuentos.

Para ralizar la represenetación gráfica, en esta oportunidad recurriremos a la base de datos denominada “ESTUDIANTES_2024” disponible en la nube.

ESTUDIANTES_2024 <- read_csv("https://docs.google.com/spreadsheets/d/1Mpkh3xnFmxjQeReY5lEiODOSVA31FcnoyuO-3T0Spzs/pub?output=csv")
names(ESTUDIANTES_2024)
ggplot(ESTUDIANTES_2024, aes(NIVEL.DIF.CARR)) + 
  geom_bar()

Mejoramos la gráfica

ggplot(ESTUDIANTES_2024, aes(NIVEL.DIF.CARR)) +
  geom_bar(fill = "yellow", color = "black") +
  ggtitle("Nivel de Dificultad de la Carrera de Ingeniería Agronómica") +
  labs(x = "Nivel de dificultad", y = "N° de estudiantes") + 
  theme(axis.title.x = element_text(size = 16), # Disminuye el tamaño de letra de las categorías del eje "x"
        axis.title.y = element_text(size = 16)) # Aumenta el tamaño de los valores del eje "y" 


9 Gráfico de barras apiladas

El gráfico de barras apiladas es una extensión del gráfico de barras, y es utilizado para mostrar la composición de una variable categórica en segmentos apilados que representan subcategorías. Cada barra total representa el valor de la categoría principal y se divide en partes que muestran cómo se distribuye el total entre las subcategorías.

Función: geom_bar(position = "stack")

Al analizar un gráfico de barras apiladas, es importante reflexionar sobre las siguientes preguntas:

  • ¿Cuál es el tamaño total de cada categoría principal y cómo varía entre ellas?
  • ¿Cómo se distribuyen las subcategorías dentro de cada barra?
  • ¿Qué proporciones destacan más y cuáles son menos significativas?
  • ¿Existen patrones evidentes o cambios significativos entre las diferentes categorías principales?

Estudiemos, por ejemplo, la opinión del “Nivel de dificultad” del Taller de R y RStudio, según el “Género”.

ggplot(ESTUDIANTES_2024, aes(NIVEL.DIF.CARR, fill = GENERO)) +
  geom_bar()

Modificamos la gráfica

ggplot(ESTUDIANTES_2024, aes(NIVEL.DIF.CARR, fill = GENERO)) +
  geom_bar(color= "black") +
  scale_fill_manual(values = c("Femenino" = "orange", "Masculino" = "white")) + # Colores personalizados
  labs(x = "Nivel de dificultad",
       y = "N° de estudiantes")

Cambiamos horientación de las barras

ggplot(ESTUDIANTES_2024, aes(NIVEL.DIF.CARR, fill = GENERO)) +
  geom_bar(color = "black") +
  scale_fill_manual(values = c("Femenino" = "orange", "Masculino" = "gray")) + 
  labs(x = "Nivel de dificultad",
       y = "N° de estudiantes") +
  coord_flip()  # Cambia la orientación de las barras a horizontal