
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í
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: