Treemaps en matplotlib con squarify

Librería

squarify

Autor principal

Uri Laserson

Treemaps en Python con squarify

La librería squarify contiene una función llamada squarify.plot que se puede utilizar para crear treemaps en Python. Para crear un treemap básico pasa un array de valores al argumento sizes. Ten en cuenta que este tipo de gráfico no necesita mostrar los ejes, por lo que puedes eliminarlos con plt.axis("off").

import matplotlib.pyplot as plt
import squarify

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

# Treemap
squarify.plot(sizes = values)

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

# plt.show()

La librería squarify

Márgenes

El argumento pad permite agregar márgenes a las divisiones del treemap. Cuanto mayor sea el valor mayor será la distancia.

import matplotlib.pyplot as plt
import squarify

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

# Treemap
squarify.plot(sizes = values,
              pad = 0.25)

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

# plt.show()

Treemap en Python

Borde

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()

Borde del treemap en Python y matplotlib con squarify

Escala de los ejes

Por defecto, los treemaps hechos con squarify son de tamaño 100x100, pero con los argumentos norm_x y norm_y puedes modificar estas dimensiones si lo necesitas para el eje X y para el Y, respectivamente.

import matplotlib.pyplot as plt
import squarify

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

# Treemap
squarify.plot(sizes = values,
              norm_x = 200, 
              norm_y = 20)

# plt.show()

Treemap con squarify

Colores

Squarify utiliza por defecto colores aleatorios de la paleta viridis, por lo que cada vez que ejecutes la función verás un resultado diferente. Si quieres establecer los colores que tú quieras puedes utilizar el argumento color y pasar como input un array de colores. Ten en cuenta que puedes controlar la transparencia de los colores con alpha.

Treemap en Python con squarify

import matplotlib.pyplot as plt
import squarify

# Datos de muestra
values = [250, 120, 280, 320, 140, 95]
colors = ['#91DCEA', '#64CDCC', '#5FBB68',
          '#F9D23C', '#F9A729', '#FD6F30']

squarify.plot(sizes = values,
              color = colors, alpha = 0.7)

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

# plt.show()

También puedes utilizar una paleta de colores predefinida en vez de especificar una array de colores. En el ejemplo siguiente utilizamos la paleta de colores 'magma' de seaborn.

Paleta de colores de un treemap en Python

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

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

# Treemap
squarify.plot(sizes = values,
              color = sb.color_palette("magma", 
                                     len(values)), alpha = 0.7)

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

# plt.show()

Agregar etiquetas

Es posible agregar etiquetas a cada división del treemap. Para ello puedes utilizar el argumento label.

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()

Agregar etiquetas o textos a un treemap en matplotlib

Si quieres agregar una etiqueta con el nombre de cada grupo y su valor correspondiente puedes utilizar \n para dividir el texto en dos líneas, como en el ejemplo anterior.

Personalización de las etiquetas

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()

Cambiar el color de las etiquetas de un treemap en matplotlib

Data Sketches

A journey of imagination, exploration, and beautiful data visualizations

Comprar en Amazon
Storytelling con Datos

Visualización de datos para profesionales

Comprar en Amazon

También te puede interesar