4 Geometrías para mostrar evolución
En este capítulo continuaremos nuestro estudio de diferentes capas de Geometría, concentrando nuestra atención en las visualizaciones que permiten mostrar evolución de una o más variables en el tiempo (ver área sombreada de la Figura 4.1).
Los gráficos más comunes para mostrar evolución en el tiempo de una o más variables son:
- Gráficos de líneas
- Gráficos de barras agrupadas
- Gráfico de columnas apiladas o barras apiladas
Al igual que en los capítulos anteriores, emplearemos en nuestros ejemplos los datos del objeto gapminder
del paquete del mismo nombre.
4.1 Gráfico de líneas
Los gráficos de líneas son apropiados para visualizar el comportamiento histórico de una o más variables de clase numeric (variable cuantitativa continua) e integer (variable cuantitativa discreta). También, nos permiten comparar el comportamiento en el tiempo de dos o más variables.
Estos gráficos reportan en el eje horizontal el período de tiempo (años, trimestres, meses o días según sea el caso) y en el eje vertical la variable de interés. Para cada periodo se identifica el correspondiente valor de la variable y todos los puntos se unen con líneas rectas. De ahí su nombre de gráfico de líneas. La función geom_line() permite construir este tipo de visulizaciones.
Por ejemplo, grafiquemos la evolución del PIB percápita de Colombia. En este caso recuerda que en el eje horizontal tendremos el año (x = year) y en el eje vertical tendremos el PIB percápita (y =gdpPercap). Entonces, primero filtramos los datos para Colombia y los pasamos a la capa de Datos. Posteriormente, agregamos la capa de Aesthetics y finalmente la capa de Geometría con la función geom_line(). Agregamos una capa de Escalas para poner las etiquetas y una de Tema para mejorar la apariencia.
# cargamos los paquetes
library(ggplot2)
library(dplyr)
library(gapminder)
# se emplea el operador pipe para
# pasar los datos y filtrar los
# datos
gapminder %>%
filter(country == "Colombia") %>%
ggplot( aes(x = year, y =gdpPercap)) +
geom_line() +
labs( y="PIB percápita ($US)",
x="Año") +
theme_minimal()
La Figura 4.2 presenta la evolución del PIB percápita de Colombia. En algunas ocasiones, también queremos incluir otros países para, además, comparar la evolución en el tiempo entre países. Esto lo podemos hacer rápidamente. En este caso, dada la estructura de los datos, podemos incluir la variable país de clase factor en el color en la capa Aesthetics.
Por ejemplo, grafiquemos la evolución del PIB percápita de los países de la Alianza del Pacífico (Colombia, Chile, Perú y México). Esto lo podemos hacer con el siguiente código:
# se emplea el operador pipe para
# pasar los datos y filtrar los
# datos
gapminder %>%
filter(country %in%
c("Colombia", "Peru", "Chile", "Mexico")) %>%
ggplot( aes(x = year, y =gdpPercap, color = country)) +
geom_line() +
labs( y="PIB percápita ($US)",
x="Año", color = "País") +
theme_minimal()
La Figura 4.3 nos permite ver la evolución en el tiempo del PIB percápita de los cuatro países. Esta tal vez es una de las visualizaciones más populares.
4.2 Barras agrupadas
Las barras agrupadas permiten comparar la evolución de la composición en el tiempo de una variable cualitativa de clase factor. Intuitivamente, esta visualización es un gráfico de barras (ver Sección 3.2) reproducido en diferentes periodos. Es decir, permite representar cómo cambia en el tiempo la participación porcentual en el total de cada uno de los posibles valores de la variable cualitativa. Típicamente, en el eje horizontal tendremos los períodos y en el eje vertical mediremos la participación porcentual de cada uno de los factores. El gráfico de barras agrupadas también lo podemos construir con la función geom_bar(). La diferencia en este caso es que tendremos que especificar qué variable se mapea al eje horizontal y cuál al vertical.
En la Sección 3.2 construimos un gráfico de barras (ver Figura 3.3) para la distribución de los países por continente disponibles en los datos del paquete gapminder. Eso lo realizamos para el año 2007. En esta oportunidad nos gustaría tener el mismo gráfico (en porcentaje) pero para todos los años que hacen parte del objeto gapminder. Para construir el gráfico necesitamos contar con un objeto de datos que tenga una columna con el número de países por continente (o la participación en el total de países) por año. En esta ocasión, por razones pedagógicas, separemos la preparación de la base de datos de la construcción de la visualización.
Los datos para nuestra visualización se pueden construir con el siguiente código29:
d1 <- gapminder %>%
# se agrupan los casos por año y continente
group_by(year, continent) %>%
# se cuentan los países por cada continente, para cada año
# frecuencia
summarise( paises = n()) %>%
# se crea la nueva variable con la frecuencia relativa
mutate(Prop_paises = 100 * paises / sum(paises))
glimpse(d1)
## Rows: 60
## Columns: 4
## Groups: year [12]
## $ year <int> 1952, 1952, 1952, 1952, 1952, 1957, 1957,…
## $ continent <fct> Africa, Americas, Asia, Europe, Oceania, …
## $ paises <int> 52, 25, 33, 30, 2, 52, 25, 33, 30, 2, 52,…
## $ Prop_paises <dbl> 36.619718, 17.605634, 23.239437, 21.12676…
Ahora, podemos crear la visualización empleando en la capa de Datos el objeto d1
. En la capa de Aesthetics podemos mapear los años al eje horizontal (x = as.character(year))30; en el eje vertical la participación porcentual de cada continente (y = Prop_paises); y el relleno de las barras corresponderá al respectivo continente (fill = continent). En la capa de Geometría emplearemos la función geom_bar(). Para esta visualización necesitamos dos argumentos. El primero es la posición de las barras que estarán una al lado de la otra. Para esto tendremos el siguiente argumento: position = “dodge”. El segundo argumento corresponde a qué estadística queremos que se represente en el eje vertical. Por defecto, geom_bar() cuenta el número de casos en cada grupo y lo pone en el eje vertical (stat=“bin”)31. En este caso queremos que se mapee al eje vertical los valores de una columna (y = Prop_paises). Esto lo logramos poniendo este argumento igual a “identity” (stat = “identity”).
ggplot(d1, aes(x = as.character(year), y = Prop_paises,
fill = continent)) +
geom_bar(position = "dodge", stat = "identity") +
labs(y = "% del número de países total",
x = "Año", fill = "Continente") +
theme_minimal()
La Figura 4.4 muestra que no ha tenido cambio la participación de los continentes durante el periodo 1952-2007. Este gráfico en esta ocasión no es interesante, pero esto dependerá de la base de datos que tengas.
El gráfico de barras agrupadas también puede ser empleado para mostrar la evolución de una variable cuantitativa y una cualitativa. Por ejemplo, podemos ver cómo ha cambiado la participación en la población mundial de cada continente. Esto lo podemos hacer con el siguiente código que genera la Figura 4.5. Puedes observar que Asia es el continente más poblado y su participación ha venido creciendo levemente.
d2 <- gapminder %>%
group_by(year, continent) %>%
summarise( Poblacion = sum(pop)) %>%
group_by(year) %>%
mutate(Prop_Poblacion = 100 * Poblacion / sum(Poblacion))
ggplot(d2, aes(x = as.character(year),
y = Prop_Poblacion, fill = continent))+
geom_bar(position = "dodge", stat="identity")+
labs(y = "% de la población mundial",
x = "Año", fill = "Continente")+
theme_minimal()
4.3 Columnas apiladas
Otra alternativa a las barras agrupadas son las barras apiladas. En este caso, como su nombre lo implica, las barras están una encima de la otra. Esta visualización implica una leve modificación al código que genera las barras agrupadas. En el argumento de posición de la función geom_bar() empleamos position = “stack”. Intenta modificar el código para obtener las Figuras 4.6 y 4.7.
4.4 Comentarios finales
En este capítulo evidenciamos que a veces crear visualizaciones implica transformar un objeto con datos para tener el conjunto de estos mismos de la manera más adecuada, y así, poder generar la visualización. Es así como el paquete dplyr (Wickham, François, et al., 2023) y el paquete ggplot2 presentan una integración ideal para facilitar el flujo de trabajo. Si aún no dominas el paquete dplyr puedes ver Alonso (2022). Con seguridad, si dominas estos dos paquetes, podrás generar visualizaciones de gran impacto en tu audiencia. Los dos paquetes te darán una gran versatilidad para mejorar la apariencia de tus visualizaciones. De hecho, en el Capítulo 6 discutiremos algunas estrategias que te serán muy útiles al momento de generar gráficos; pero antes, estudiaremos las visualizaciones que permiten mostrar relación entre variables (Capítulo 5).
Referencias
Asegúrate que entiendes cómo se resumen las observaciones y se crean las variables. Si necesitas ayuda, puedes ver el Capítulo 2 de Alonso (2022).↩︎
Aquí estamos empleando un truco. Pasando los años como texto hace que aparezcan todos los años en el eje. Intenta mapear la variable año sin la transformación a texto (x = year) y verás que no aparecerán todos los años. ↩︎
Nota que esto fue lo que hicimos cuando creamos el gráfico de barras que se reporta en la Figura 3.3.↩︎