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()
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()
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()
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()
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
.
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
.
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()
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()
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()
También te puede interesar