Cómo usar dplyr para manejar datos y graficar un mapa de árbol o treemap en R

Picture of Hassel Fallas

Hassel Fallas

Analista de datos y periodista

Este es el tercer artículo de la serie sobre cómo usar ggplo2 en R para diseñar mejores gráficos periodísticos. En esta ocasión te mostraré cómo crear un mapa de árbol o treemap. Según The Data Viz Catalogue, un mapa de árbol «muestra las cantidades para cada categoría a través del tamaño del área. A cada categoría se le asigna un área rectangular con sus rectángulos de subcategoría dentro de él. Cuando se asigna una cantidad a una categoría, el tamaño de su área se muestra en proporción a esa cantidad y a otras cantidades dentro de la misma categoría padre en una relación de parte a todo».

Para crearlo también te guiaré en el uso de una de las más famosas librerías para manipular datos en R: dplyr. Antes de empezar, te dejo algunos conceptos claves y te adjunto los enlaces a los dos posts anteriores:

¿Qué es R? R es un entorno y lenguaje de programación con un enfoque al análisis estadístico

RStudio es un entorno de desarrollo integrado (IDE) para el lenguaje de programación R, dedicado a la computación estadística y gráficos

La librería ggplot2 de R es un sistema organizado de visualización de datos. Forma parte del conjunto de librerías llamado tidyverse. Fue creada por Hadley Wickham in 2005

¿Qué librerías necesitas cargar en R Studio antes de empezar?
				
					library(ggplot2) #Para hacer las gráficas
library(viridis)  #Para seleccionar paletas de color
library(ggthemes) #Para elegir temas o plantillas de diseño para tu gráfico
library(hrbrthemes) #Para elegir más temas o plantillas de diseño para tu gráfico
library(treemapify) #Librería para crear treemaps en ggplot2
library(dplyr) #Permite manipular los datos paso a paso

				
			

Descarga la hoja aquí

Para facilitar este ejercicio he inventado una bd que puedes descargar desde el botón
Paso #1. Crear un gráfico sencillo
				
					ggplot(bd_fake, aes(area = Cuenta, fill = Canción_Favorita))+
  geom_treemap()
				
			
Resultado:

¿Por qué el resultado se ve así? Porque cada cuadro representa un registro en la base de datos. Los datos no están agrupados para reflejar el total de preferencias por una u otra de las canciones en el set de datos.
¿Cómo corregir este problema desde R? Con ayuda de la librería dplyr, sensacional para manipular datos.

Paso #2. Crear un código para hacer la sumatoria total de personas que en la base de datos gustan de cada canción

Además, con la función mutate uniremos en una sola etiqueta la información de cada canción y la cantidad de personas que la prefieren

				
					Cuenta2 <- bd_fake%>%
  group_by(Canción_Favorita)%>%
  summarise(Total=sum(Cuenta))%>%
  mutate(Canción_Favorita_total=paste(Canción_Favorita, Total, sep = "\n"))
				
			

Con esta función hemos creado un dataframe o una estructura de datos nueva. Este dataframe lo hemos llamado Cuenta2, es el que utilizaremos en adelante para este ejercicio. Nota también que los nombres de las variables han cambiado. 

Paso #3. Con los datos agregados del nuevo df generemos un nuevo mapa de árbol

 

				
					ggplot(Cuenta2, aes(area = Total, fill = Canción_Favorita_total))+
  geom_treemap()
				
			
Resultado:
Paso #4. Mejoremos el gráfico incluyendo las etiquetas de los totales por canción y centrándolos en cada rectángulo
				
					ggplot(Cuenta2, aes(area = Total, fill = Canción_Favorita,
                    label = Canción_Favorita_total)) +
  geom_treemap() +
  geom_treemap_text(colour = "white",
                    place = "centre",
                    size = 15)
				
			
Resultado:
Paso #5. Añadamos una paleta personalizada de colores, un tema para dar estilo al gráfico y, finalmente, demos instrucciones para los títulos y otros textos relevantes
				
					ggplot(Cuenta2, aes(area = Total, fill = Canción_Favorita,
                    label = Canción_Favorita_total)) +
  geom_treemap() +
  geom_treemap_text(colour = "white",
                    place = "centre",
                    size = 15) +
  
  scale_fill_manual(values = c("#0F4A59", "#DB6112", "#F38822", "#95021E","#5C0F3E"))+
  theme_economist_white() +
  theme(legend.position="none")+
  theme(
    panel.grid.major = element_line(linetype = "blank"), 
    panel.grid.minor = element_line(linetype = "blank"), 
    axis.text = element_text(family = "mono", size = 12),
    plot.title = element_text(family = "sans", size = 18, margin=margin(0,0,10,0)))+
  xlab("")+
  ylab("")+
  labs(title = "Un gráfico de treemap o mapa de árbol",
       subtitle = "Acá se escribe una conclusión que amplíe el título",
       caption = "Fuente:BD inventada para este post")
				
			
Resultado:
Paso #6. Si deseas hacer un treemap que refleje las canciones favoritas por identidad de género puedes también usar dplyr para crear el dataframe
				
					#dataframe con canción favorita según identidad de género

Identidad <- bd_fake%>%
  group_by(Canción_Favorita, Identidad_género)%>%
  summarise(Total=sum(Cuenta))%>%
  mutate(Canción_Favorita_total=paste(Canción_Favorita, Total, sep = "\n"))
  
  #Gráficos finales
  ggplot(Identidad, aes(area = Total, fill = Canción_Favorita,
                    label = Canción_Favorita_total)) +
  geom_treemap() +
  geom_treemap_text(colour = "white",
                    place = "centre",
                    size = 12) +
  
  scale_fill_manual(values = c("#0F4A59", "#DB6112", "#F38822", "#95021E","#5C0F3E"))+
  
  facet_wrap(~Identidad_género) +
  
  theme_economist_white() +
  theme(legend.position="none")+
  theme(
    panel.grid.major = element_line(linetype = "blank"), 
    panel.grid.minor = element_line(linetype = "blank"), 
    panel.spacing = unit(5, "lines"),
    axis.text = element_text(family = "mono", size = 12),
    plot.title = element_text(family = "sans", size = 18, margin=margin(0,0,10,0)))+
  xlab("")+
  ylab("")+
  labs(title = "Un gráfico de treemap o mapa de árbol",
       subtitle = "Acá se escribe una conclusión que amplíe el título",
       caption = "Fuente:BD inventada para este post")








				
			
Resultado:

Espero que este ejercicio te haya sido útil para mejorar el diseño de tus gráficos de barras y su comunicación. Si deseas leer más sobre temas de visualización y análisis de datos, te recomiendo estos artículos: 

error: No se puede descargar