Gráficos Treemap con R y Python: Mapeando la jerarquía de datos.

Nicolás Urrego
14 min readSep 27, 2023

--

En el mundo actual, donde los datos fluyen constantemente desde diversas fuentes y en cantidades masivas, la capacidad de comprender y comunicar eficazmente la información es esencial. Los gráficos Treemap han emergido como una herramienta poderosa en el arsenal de visualización de datos, permitiendo a los analistas y profesionales representar datos jerárquicos de manera efectiva y comprensible.

Este artículo te llevará a un apasionante viaje a través del mundo de los gráficos Treemap. Exploraremos desde los fundamentos hasta las técnicas avanzadas, desentrañando los secretos detrás de esta forma de representación visual. Aprenderás cómo crear Treemaps atractivos y personalizados en lenguajes de programación populares como R y Python, y cómo aprovechar al máximo esta herramienta para comunicar tus hallazgos de manera impactante.

Ya sea que seas un analista de datos que busca nuevas formas de visualizar información compleja o un curioso entusiasta de la visualización, este artículo te proporcionará los conocimientos y las habilidades necesarias para utilizar los gráficos Treemap de manera efectiva. Así que prepárate para sumergirte en el mundo de la visualización de datos y desbloquear el poder de los gráficos Treemap.

Tabla de contenidos:

  1. Definición
  2. Estructura
  3. Aplicaciones
  4. Pros y contras de utilizar un gráfico Treemap
  5. Consideraciones sobre los datos y mejores prácticas
  6. Creación de un gráfico Treemap con R y Python

Definición de los gráficos Treemap

Los gráficos Treemap, también conocidos como mapas de árbol, son una técnica de visualización de datos que representan información jerárquica mediante la disposición de rectángulos anidados. Cada rama del árbol recibe un rectángulo, el cual se divide en rectángulos más pequeños que representan subramas. La área de un rectángulo correspondiente a un nodo hoja es proporcional a una dimensión especificada en los datos. Frecuentemente, los nodos hoja se colorearán para mostrar una dimensión adicional de los datos.

Los Treemaps se utilizan para mostrar dos tipos de información simultáneamente:

  1. La división del conjunto total: en cada nivel de la jerarquía, es sencillo comprender cuál es la entidad más importante y cómo se distribuye todo entre las entidades. Incluso se pueden utilizar Treemaps sin jerarquía alguna, simplemente para mostrar el valor de diversas entidades, similar a un gráfico de barras.
  2. La organización de la jerarquía: es importante destacar que es difícil representar más de tres niveles en una versión estática.

Un punto fuerte de los Treemaps es su eficiente utilización del espacio, lo que los hace útiles para representar grandes cantidades de datos.

Los Treemaps son una herramienta valiosa para analizar datos complejos y comunicar información de manera efectiva al mostrar relaciones jerárquicas y distribución de valores en una estructura visualmente atractiva y compacta.

Estructura de los gráficos Treemap

La estructura de los gráficos Treemap es fundamental para su capacidad de representar datos jerárquicos de manera efectiva y comprensible. Los Treemaps tienen una organización jerárquica similar a un árbol, donde los datos se descomponen en categorías y subcategorías. Aquí está la estructura básica de un gráfico Treemap:

  1. Nodo raíz: El nodo raíz es el punto de partida de la jerarquía y representa el conjunto total de datos. En un Treemap, se representa como un rectángulo grande que abarca toda la visualización.
  2. Nodos internos: Los nodos internos son rectángulos más pequeños que representan categorías o grupos de datos de nivel superior. Estos nodos se derivan del nodo raíz y están contenidos dentro de él. La subdivisión de un nodo interno puede representar la descomposición de datos en subcategorías.
  3. Nodos hoja: Los nodos hoja son los rectángulos más pequeños en el Treemap y representan las categorías o subcategorías más específicas en la jerarquía de datos. Cada nodo hoja tiene un área proporcional a una dimensión específica de los datos, como el valor numérico que representa.
  4. Color y etiquetas: Los Treemaps a menudo utilizan colores para codificar información adicional, como una segunda dimensión de los datos. Por ejemplo, cada nodo hoja puede colorearse de manera diferente para resaltar diferentes categorías. Además, las etiquetas o texto se pueden agregar a los rectángulos para proporcionar información adicional sobre lo que representa cada nodo.
  5. Anidamiento: La estructura de los Treemaps se basa en el anidamiento de rectángulos, donde los nodos internos (categorías) contienen nodos hoja (subcategorías). Esto crea una representación visual jerárquica de los datos.

La clave de la estructura de un Treemap es que permite representar datos jerárquicos de manera compacta y efectiva. Los rectángulos más grandes representan categorías principales, mientras que los rectángulos más pequeños dentro de ellos representan subcategorías. Esta estructura facilita la visualización de la distribución de datos y las relaciones jerárquicas, lo que permite a los usuarios comprender la información de manera rápida y eficiente.

Ejemplos visuales

Para comprender mejor cómo funciona un gráfico Treemap, consideremos dos ejemplos:

Podemos genera una tabla que contenga un inventario de automóviles. Podemos visualizar el recuento de los modelos de automóviles dentro de cada marca para ver una descripción general del inventario.

También podemos generar una tabla que contenga transacciones en varios estados y ciudades de Estados Unidos. Como parte del análisis, podemos visualizar el importe de transacción total por estado y por ciudad dentro de cada estado.

Aplicaciones de un gráfico Treemap

Los gráficos Treemap son una herramienta versátil de visualización de datos que se pueden utilizar en una variedad de contextos prácticos. Aquí tienes algunos ejemplos de casos donde los Treemaps son útiles:

  1. Gestión de recursos financieros: Las organizaciones pueden utilizar Treemaps para representar el desglose del presupuesto financiero. Cada nodo hoja podría representar un área de gasto, como marketing, recursos humanos o investigación y desarrollo, y el tamaño de los rectángulos reflejaría el presupuesto asignado a cada área.
  2. Análisis de ventas: En el comercio electrónico, los Treemaps pueden utilizarse para mostrar la distribución de ventas por categoría de productos y subcategorías. Los rectángulos representarían diferentes categorías de productos, y el tamaño del rectángulo reflejaría las ventas totales de esa categoría.
  3. Portafolios de inversión: Los inversores pueden utilizar Treemaps para representar la estructura de sus carteras de inversión. Cada activo financiero (acciones, bonos, bienes raíces, etc.) sería un nodo, y el tamaño del rectángulo representaría la proporción de la cartera asignada a cada activo.
  4. Consumo de energía: Las empresas pueden utilizar Treemaps para mostrar cómo se distribuye el consumo de energía en diferentes departamentos o áreas de la organización. Cada rectángulo podría representar un departamento, y el tamaño reflejaría su consumo de energía.
  5. Visualización de datos de mercado: En el análisis de mercado, los Treemaps pueden mostrar la participación de mercado de diferentes empresas en una industria. Cada empresa sería un nodo hoja, y el tamaño del rectángulo representaría su cuota de mercado.

Estos son solo algunos ejemplos de cómo se pueden utilizar los gráficos Treemap en situaciones prácticas para representar datos jerárquicos y multivariables de manera efectiva y comprensible. Su capacidad para mostrar relaciones jerárquicas y distribución de datos los hace valiosos en una amplia gama de campos y aplicaciones.

Pros y contras de utilizar un gráfico Treemap

Los gráficos Treemap son una herramienta de visualización de datos poderosa que ofrece numerosas ventajas:

  1. Identificación de patrones y relaciones jerárquicas: Los Treemaps permiten a los usuarios identificar patrones y discernir relaciones entre dos categorías o dos elementos en una estructura de datos jerárquica. Esto es especialmente útil cuando se necesita comprender la organización de datos complejos.
  2. Eficiente utilización del espacio: Una de las principales ventajas de los Treemaps es su capacidad para utilizar eficientemente el espacio. Pueden representar decenas de miles de puntos de datos en un espacio limitado, lo que facilita la visualización de grandes conjuntos de información sin que la visualización se vuelva abrumadora.
  3. Visualización multidimensional: Los Treemaps pueden mostrar con precisión varios elementos a la vez, incluyendo las proporciones de “parte a todo”. Esto significa que los usuarios pueden obtener una visión completa de la distribución de datos en una estructura jerárquica.
  4. Codificación de atributos: Utilizan claves de tamaño y color para visualizar múltiples atributos. Esto permite codificar categorías y subcategorías por colores, lo que facilita la identificación y comparación de elementos relacionados. Por ejemplo, las ventas de productos electrónicos pueden estar en tonos de azul, mientras que las de muebles pueden ser tonos de amarillo, simplificando la comprensión de datos complejos.

Desventajas:

Sin embargo, es importante tener en cuenta las limitaciones de los gráficos Treemap:

  1. Incompatibilidad con variaciones en magnitud: Los Treemaps no son adecuados para conjuntos de datos que varían significativamente en magnitud. Los nodos hoja deben representar valores positivos, y no son apropiados para datos con valores negativos.
  2. Limitaciones de espacio y legibilidad: Dado que los Treemaps representan datos en forma de rectángulos, pueden ocupar un espacio significativo en la visualización. Esto puede dificultar la legibilidad, ya que los gráficos largos y lineales son más fáciles de leer que los anchos y grandes. Además, la impresión de Treemaps puede ser complicada debido a su formato.
  3. Complejidad en la generación: Algunos Treemaps pueden requerir un esfuerzo considerable para generarse, incluso con programas especializados, lo que puede ser una limitación en términos de recursos y tiempo.
  4. Claridad en la jerarquía: En comparación con otros tipos de gráficos diseñados específicamente para datos jerárquicos, como los diagramas de rayos solares o los diagramas de árbol, los Treemaps pueden no representar los niveles jerárquicos con la misma nitidez en algunas situaciones.

A pesar de estas limitaciones, los gráficos Treemap siguen siendo una herramienta visualmente evocadora para representar datos complejos y proporcionar información que puede ser difícil de capturar con otros tipos de gráficos. Su capacidad para mostrar relaciones jerárquicas y distribución de datos los convierte en una herramienta valiosa en el análisis de datos y la toma de decisiones informadas.

Consideraciones sobre los datos y mejores prácticas

Al crear un gráfico Treemap, es esencial tener en cuenta algunas consideraciones sobre los datos y seguir mejores prácticas para garantizar que la visualización sea efectiva y comprensible. Aquí hay algunas pautas importantes a seguir:

Consideraciones sobre los datos:

  1. Jerarquía de datos clara: Asegúrate de que tus datos tengan una jerarquía clara y estructurada con categorías principales y subcategorías. Los Treemaps se basan en esta estructura para representar datos de manera efectiva.
  2. Variables adecuadas: Elige las variables adecuadas para el tamaño de los rectángulos y, si es necesario, para el color. La variable de tamaño debe ser cuantitativa y representar la proporción de “parte a todo” en la jerarquía.
  3. Datos complejos: Los Treemaps son ideales para visualizar datos jerárquicos complejos, pero no siempre son la mejor opción para conjuntos de datos simples. Utiliza esta visualización cuando tengas una estructura jerárquica significativa para mostrar.
  4. Limpieza de datos: Limpia y verifica tus datos antes de crear el Treemap. Asegúrate de que no haya valores faltantes, inconsistentes o erróneos que puedan distorsionar la representación.

Mejores prácticas para un gráfico Treemap:

  1. Sencillez: Mantén tu Treemap lo más simple posible. Demasiadas categorías o subcategorías pueden hacer que la visualización sea confusa. Considera la agregación o el agrupamiento de datos cuando sea necesario.
  2. Colores significativos: Si utilizas colores, asegúrate de que tengan un significado claro y sean coherentes con tus datos. Utiliza una paleta de colores que facilite la identificación y la interpretación de las categorías.
  3. Etiquetas claras: Agrega etiquetas a los rectángulos para identificar categorías y proporcionar información adicional si es necesario. Asegúrate de que las etiquetas sean legibles y no se superpongan.
  4. Interactividad: Si tu herramienta de visualización lo permite, utiliza la interactividad para permitir a los usuarios explorar las subcategorías y obtener detalles adicionales al hacer clic o pasar el mouse sobre los rectángulos.
  5. Títulos explicativos: Agrega un título claro y descriptivo a tu Treemap para indicar su propósito y contexto. Esto ayuda a los espectadores a comprender de inmediato lo que están viendo.
  6. Orden de categorías: Considera el orden en que se presentan las categorías principales y subcategorías en el Treemap. Organiza las categorías de manera lógica o en función de su importancia, si es relevante.
  7. Escalas de color graduales: Si utilizas colores para representar datos cuantitativos, considera el uso de escalas de color graduales en lugar de colores categóricos. Esto puede hacer que la visualización sea más informativa.

Siguiendo estas consideraciones y mejores prácticas, podrás crear gráficos Treemap efectivos y comprensibles que ayuden a comunicar tus datos de manera clara y eficaz.

Creación de un gráfico Treemap con R y Python

En esta sección, nos adentraremos en el proceso de creación de gráficos utilizando R y Python. Comenzaremos con una introducción a la creación de treemaps, una forma efectiva de representar datos jerárquicos en un formato visualmente atractivo. Veremos cómo utilizar la librería ‘treemap’ en R y ‘squarify’ en Python para crear treemaps básicos y personalizarlos según nuestras necesidades.

En R:

Este ejemplo sirve como una introducción a la sintaxis de la biblioteca treemap: es necesario proporcionar al menos un conjunto de datos (data), especificar la columna que define los grupos (index), y seleccionar la columna que establece el tamaño de cada grupo (vSize).

# Cargamos la librería treemap
library(treemap)

# Generamos los datos para el gráfico
grupo <- c("grupo-1","grupo-2","grupo-3")
valores <- c(13,5,22)
data <- data.frame(grupo,valores)

# treemap
treemap(data,
index="grupo",
vSize="valores",
type="index"
)

Contamos con tres conjuntos, cada uno compuesto por múltiples subconjuntos, en los cuales cada subconjunto está asociado a un valor que se mapea a una superficie.

En el parámetro “índice,” es esencial especificar los niveles en un orden de jerarquía que siga la prioridad: grupo > subgrupo > sub-subgrupo.

# Cargamos la librería treemap
library(treemap)

# Generamos los datos para el gráfico
grupos <- c(rep("grupo-1",4),rep("grupo-2",2),rep("grupo-3",3))
subgrupos <- paste("subgrupos" , c(1,2,3,4,1,2,1,2,3), sep="-")
valores <- c(13,5,22,12,11,7,3,1,23)
data <- data.frame(grupos,subgrupos,valores)

# treemap
treemap(data,
index=c("grupos","subgrupos"),
vSize="valores",
type="index"
)

En Python:

Dentro de la librería squarify, existe una función llamada squarify.plot que resulta útil para generar treemaps en Python. Para construir un treemap sencillo, simplemente proporciona una matriz de valores en el argumento sizes. Es importante destacar que este tipo de gráfico no requiere mostrar los ejes, por lo que puedes desactivarlos utilizando plt.axis(“off”).

import matplotlib.pyplot as plt
import squarify

# Datos de muestra
values = [250, 120, 280, 320, 140, 95]
labels = ['Grupo 1\n 250', 'Grupo 2\n 120', 'Grupo 3\n 280',
'Grupo 4\n 320', 'Grupo 5\n 140', 'Grupo 6\n 95']
colors = ['#91DCEA', '#64CDCC', '#5FBB68',
'#F9D23C', '#F9A729', '#FD6F30']

# Treemap
squarify.plot(sizes = values, label = labels,
color = colors, alpha = 0.7)

# Eliminar los ejes:
plt.axis("off")

# plt.show()

Personalización de gráficos Treemap

La personalización es una parte esencial de la creación de gráficos efectivos. Podemos modificar colores, títulos, etiquetas y otros elementos para dar vida a tus visualizaciones. Ya sea que estés trabajando con treemaps en R o Python, aprenderás las técnicas esenciales para hacer que tus visualizaciones destaquen y comuniquen de manera efectiva la información que deseas transmitir.

Cambiar etiquetas

En R: Es importante destacar que tienes la flexibilidad de aplicar atributos distintos a cada nivel del treemap. Un ejemplo de esto sería emplear el color blanco para las etiquetas de los grupos y el color naranja para las etiquetas de los subgrupos. Esto te permite personalizar aún más la apariencia de tu gráfico.

# Biblioteca
library(treemap)

# Crear datos
grupos <- c(rep("grupo-1",4),rep("grupo-2",2),rep("grupo-3",3))
subgrupos <- paste("subgrupos" , c(1,2,3,4,1,2,1,2,3), sep="-")
valores <- c(13,5,22,12,11,7,3,1,23)
data <- data.frame(grupos,subgrupos,valores)

# Etiquetas personalizadas:
treemap(data, index=c("grupos","subgrupos"), vSize="valores", type="index",

fontsize.labels=c(15,12), # tamaño de las etiquetas. Proporciona el tamaño por nivel de agregación: tamaño para grupo, tamaño para subgrupo, sub-subgrupos...
fontcolor.labels=c("white","orange"), # Color de las etiquetas
fontface.labels=c(2,1), # Fuente de las etiquetas: 1, 2, 3, 4 para normal, negrita, cursiva, negrita-cursiva...
bg.labels=c("transparent"), # Color de fondo de las etiquetas
align.labels=list(
c("center", "center"),
c("right", "bottom")
), # ¿Dónde colocar las etiquetas en el rectángulo?
overlap.labels=0.5, # número entre 0 y 1 que determina la tolerancia de la superposición entre etiquetas. 0 significa que las etiquetas de niveles inferiores no se imprimen si las etiquetas de niveles superiores se superponen, 1 significa que las etiquetas siempre se imprimen. Valores intermedios, por ejemplo, el valor predeterminado .5, significa que las etiquetas de niveles inferiores se imprimen si otras etiquetas no se superponen con más del 50% de su tamaño de área.
inflate.labels=F, # Si es verdadero, las etiquetas son más grandes cuando el rectángulo es más grande.

)

En Python: El estilo de las etiquetas se puede sobrescribir pasando un diccionario a text_kwargs. En el siguiente bloque de código personalizamos el tamaño de fuente y el color, ya que la paleta de colores utilizada es muy oscura y el texto blanco se lee mejor.

import matplotlib.pyplot as plt
import squarify
import seaborn as sb

# Datos de muestra
values = [250, 120, 280, 320, 140, 95]
labels = ['Grupo 1\n 250', 'Grupo 2\n 120', 'Grupo 3\n 280',
'Grupo 4\n 320', 'Grupo 5\n 140', 'Grupo 6\n 95']

# Treemap
squarify.plot(sizes = values, label = labels,
pad = 0.2,
text_kwargs = {'fontsize': 10, 'color': 'white'},
color = sb.color_palette("rocket", len(values)))

# Eliminar los ejes:
plt.axis("off")

# plt.show()

Bordes del gráfico

Puedes controlar el borde del gráfico en R de la siguiente manera:

  • El color con border.col (color de borde).
  • El ancho con border.lwds (ancho de borde).

Recuerda que aún puedes proporcionar un vector para cada opción: esto establece el valor para grupos, subgrupos y así sucesivamente.

# Cambiar bordes:
treemap(data, index=c("grupo","subgrupo"), vSize="valores", type="index",

border.col=c("black","white"), # Color de los bordes de los grupos, de los subgrupos, de los subgrupos ....
border.lwds=c(7,2) # Ancho de los bordes

)

En Python tambien podemos modificar los bordes: Es posible agregar un borde a los rectángulos con el argumento ec, como en el ejemplo siguiente.

import matplotlib.pyplot as plt
import squarify

# Datos de muestra
values = [250, 120, 280, 320, 140, 95]

# Treemap
squarify.plot(sizes = values,
ec = 'black')

# Eliminar los ejes:
plt.axis("off")

# plt.show()

Por último puedes modificar otros argumentos para una personalización más general en R. El argumento de paleta acepta cualquier paleta de RColorBrewer.

# Características generales:
treemap(data, index=c("grupos","subgrupos"), vSize="valores",

type="index", # Cómo colorear el treemap. Tipo: consulta la ayuda (help(treemap)) para obtener más información.
palette = "Set1", # Selecciona tu paleta de colores de los ajustes predefinidos de RColorBrewer o crea la tuya propia.
title="Mi Treemap", # Personaliza tu título
fontsize.title=12, # Tamaño del título
)

En resumen, este artículo ha desglosado de manera detallada el potencial y la utilidad de los gráficos Treemap en la visualización de datos. Hemos explorado desde los conceptos básicos hasta las técnicas avanzadas, y aquí están las conclusiones clave:

  • Los gráficos Treemap son una herramienta poderosa para representar datos jerárquicos de manera efectiva y compacta.
  • Su flexibilidad y capacidad de personalización permiten adaptarlos a una amplia variedad de necesidades de visualización.
  • A través de ejemplos en lenguajes como R y Python, hemos demostrado cómo crear Treemaps y personalizar su apariencia.
  • Es importante tener en cuenta las buenas prácticas de visualización y las limitaciones de los Treemaps al seleccionar esta forma de representación.

La capacidad de identificar patrones, mostrar relaciones jerárquicas y comunicar datos de manera efectiva hacen que los Treemaps sean una herramienta valiosa para analistas de datos y profesionales de la visualización.

--

--

Nicolás Urrego

Data Scientis | Data Analyst | Data Base | Machine Learning | Communicator | El mundo de datos en español para descubrir, aprender y compartir. 💡👨‍💻📈