Un Treemap (mapa de árbol) es una visualización compuesta de rectángulos anidados.
Cada rectángulo representa una categoría dentro de una dimensión seleccionada y está ordenado jerárquicamente en un árbol.
El área del rectángulo es proporcional al valor que representa.
Esta técnica fue desarrollada por Ben Shneiderman (Universidad de Maryland) con el objetivo de aprovechar al máximo espacios reducidos en gráficos jerárquicos.
El rectángulo más grande representa la parte más importante del universo.
El rectángulo más pequeño representa la parte menos significativa.
El color puede usarse para dos propósitos:
Dimensiones → paletas categóricas.
Medidas/KPIs → paletas continuas.
Colores más oscuros destacan valores extremos.
¿Para qué sirve?
Un Treemap es especialmente útil para mostrar relaciones parte-todo:
Permite ver rápidamente qué categorías tienen mayor peso relativo.
Facilita la comparación de patrones y cantidades en un espacio limitado.
Puede mostrar hasta 3 niveles de jerarquía de manera efectiva en estático.
Uso eficiente del espacio → ideal para grandes volúmenes de datos.
Permite mostrar simultáneamente jerarquía y proporciones.
Con interactividad se pueden explorar fácilmente múltiples niveles.
Errores comunes
Un buen Treemap debe tener:
- Valores numéricos claros.
- Jerarquía bien definida.
- No más de 3–4 rectángulos etiquetados.
- Nivel jerárquico superior bien identificado.
- Solo valores positivos.
Un mal Treemap ocurre cuando:
- Tiene demasiadas categorías → se ve abarrotado.
- Los rectángulos son muy similares en tamaño → difícil de comparar.
- Usa la misma paleta de color para distintas categorías.
Alternativa recomendada:
Cuando el Treemap se vuelve confuso, es mejor usar un gráfico de barras, ya que permite comparar fácilmente de mayor a menor.
Variaciones
Estáticos → adecuados para 1–2 niveles jerárquicos.
Interactivos → recomendados cuando hay 3 o más niveles.
Permiten hacer zoom en un grupo y explorar subcategorías.
Clic en el título para volver al nivel superior.
Dataset: Precios Agroindustria de Cacao (2012 - 2025)
Archivo:MAG_PreciosAgroindustriaCacao_2025Junio.csv Fuente: Ministerio de Agricultura y Ganadería (MAG), Ecuador Última actualización: Junio 2025
import pandas as pddf = pd.read_csv("mag_preciosagroindustriacacao_2025junio.csv", sep=";")print(df.head())print(df.info())
PACC_ANIO PACC_MES DPA_PROVINCIA DPA_CANTON PACC_PRODUCTO \
0 2012 Enero El Oro Arenillas Cacao seco mezclado
1 2012 Enero El Oro Arenillas Cacao seco mezclado
2 2012 Enero El Oro El Guabo Cacao seco mezclado
3 2012 Enero El Oro El Guabo Cacao seco mezclado
4 2012 Enero El Oro Machala Cacao seco mezclado
PACC_PRESENTACION PACC_TIPO PACC_PRECIO_USD PACC_USD_KG
0 Quintal de 100,00 libras Compra 71.41 1.57
1 Quintal de 100,00 libras Venta 74.06 1.63
2 Quintal de 100,00 libras Compra 73.75 1.63
3 Quintal de 100,00 libras Venta 84.00 1.85
4 Quintal de 100,00 libras Compra 75.00 1.65
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 26246 entries, 0 to 26245
Data columns (total 9 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 PACC_ANIO 26246 non-null int64
1 PACC_MES 26246 non-null object
2 DPA_PROVINCIA 26246 non-null object
3 DPA_CANTON 26246 non-null object
4 PACC_PRODUCTO 26246 non-null object
5 PACC_PRESENTACION 26246 non-null object
6 PACC_TIPO 26246 non-null object
7 PACC_PRECIO_USD 26246 non-null float64
8 PACC_USD_KG 26246 non-null float64
dtypes: float64(2), int64(1), object(6)
memory usage: 1.8+ MB
None
import plotly.express as pximport plotly.io as piopio.renderers.default ="notebook"# Agrupamos por provincia y cantón, tomando el precio promediodf_group = df.groupby( ["DPA_PROVINCIA", "DPA_CANTON"], as_index=False)["PACC_PRECIO_USD"].mean()# Treemapfig = px.treemap( df_group, path=[px.Constant("Ecuador"), "DPA_PROVINCIA", "DPA_CANTON"], values="PACC_PRECIO_USD", color="PACC_PRECIO_USD", color_continuous_scale="RdBu", color_continuous_midpoint=np.average(df_group["PACC_PRECIO_USD"]))fig.update_layout( title="Precios de cacao por provincia y cantón", margin=dict(t=50, l=25, r=25, b=25))fig.show()
# Treemapfig = px.treemap( df_group, path=[px.Constant("Ecuador"), "DPA_PROVINCIA", "DPA_CANTON"], values="PACC_PRECIO_USD", color="PACC_PRECIO_USD", color_continuous_scale="RdBu", color_continuous_midpoint=np.average(df_group["PACC_PRECIO_USD"]), range_color=[0, df_group["PACC_PRECIO_USD"].max()] # 🔹 Ajuste de la escala)fig.update_layout( title="Precios de cacao por provincia y cantón", margin=dict(t=50, l=25, r=25, b=25))fig.show()
Cambio de color y titulo , eliminacion barra lateral, redondeo
df_group = ( df.groupby(["DPA_PROVINCIA", "DPA_CANTON"], as_index=False)["PACC_PRECIO_USD"] .mean() .round(2))# Treemap fig = px.treemap( df_group, path=[px.Constant("Ecuador"), "DPA_PROVINCIA", "DPA_CANTON"], values="PACC_PRECIO_USD", color="PACC_PRECIO_USD", color_continuous_scale="BuGn", # color_continuous_midpoint=np.average(df_group["PACC_PRECIO_USD"]), range_color=[0, df_group["PACC_PRECIO_USD"].max()] # inicio en 0)# Eliminar barra lateralfig.update_coloraxes(showscale=False)fig.update_layout( title=' <span style="color:#43B099;">PRECIOS </span>''<span style="color:#9B9B9B;">DE CACAO POR PROVINCIA Y CANTÓN </span>' , margin=dict(t=50, l=25, r=25, b=25))fig.show()
Realize el mismo gráfico para la base de articulos cientificos Ecuador