Python en Español

Tutorial del mapa de calor de Seaborn (Visualización de datos en Python)

En este tutorial, representaremos datos en un mapa de calor al utilizar una biblioteca Python llamada seaborn. Esta biblioteca es utilizada para visualizar datos basados en Matplotlib.

Aprenderá que es un mapa de calor, como crearlo, como cambiar sus colores, ajustar su tamaño de fuente, y mucho más, así que vamos a empezar.

 

¿Qué es un mapa de calor?

El mapa de calor es una forma de representar los datos en una forma bidimensional. Los valores de los datos son representados como colores en el gráfico. La meta del mapa de calor es proporcionar un resumen visual a color de la información.

Crear un mapa de calor

Al crear un mapa de calor en Python, podemos utilizar la biblioteca Seaborn. La biblioteca Seaborn es construida sobre Matplotlib. La librería Seaborn proporciona una interface de visualización de datos de alto nivel donde podemos dibujar nuestra matriz.

Para este tutorial, utilizaremos los siguientes componentes Python:

  • Python 3 (utilizaré Python 3.7)
  • Pandas
  • Matplotlib
  • Numpy
  • Seaborn

Para instalar seaborn, corre el comando pip como sigue:

pip install seaborn

Instalar Seaborn

Seaborn soporta los siguientes gráficos:

  • Gráficos de DistribuciónGráficos de MatrizGráficos de RegresiónGráficos de Series de TiempoGráficos Categóricos

Okay, vamos a crear un mapa de calor ahora:

Importa los siguientes módulos requeridos:

import numpy as np

import seaborn as sb

import matplotlib.pyplot as plt

Importamos el módulo numpy para generar un arreglo de números aleatorios entre un rango dado el cual será mapeado como un mapa de calor.

data = np.random.rand(4, 6)

Un arreglo bidimensional es creado con 4 filas y 6 columnas. Ahora vamos a almacenar estos arreglos en el mapa calor. Podemos crear un mapa de calor al utilizar la función mapa de calor del módulo seaborn. Entonces pasaremos los datos como sigue:

heat_map = sb.heatmap(data)

Utilizando matplotlib, mostraremos el mapa de calor en la salida:

plt.show()

Mostrar mapa de calor Seaborn

¡Felicitaciones! ¡Su primer mapa de calor ha sido creado!

 

Quitar las etiquetas x tick del mapa de calor

Los valores del eje x y eje y para cualquier bloque en el mapa de calor son llamados etiquetas tick. Las etiquetas tick son agregadas por defecto. Si queremos quitar las etiquetas tick, podemos definir los atributos de las xticklabel o las yticklabel como falso como sigue:

heat_map = sb.heatmap(data, xticklabels=False, yticklabels=False)

etiquetas x tick del mapa de calor

Establecer las etiquetas del eje X en un mapa de calor

Podemos agregar una etiqueta en el eje x al utilizar el atributo xlabel de Matplotlib como se muestra en el siguiente código:

>>> plt.xlabel("Values on X axis")

utilizar el atributo xlabel

The result will be as follows:

Mostrar etiqueta usando xlabel

 

Quitar las etiquetas y tick del mapa de calor

Las etiquetas para el eje y son agregadas por defecto. Para quitarlas, podemos establecer las yticklabels a falso.

heat_map = sb.heatmap(data, yticklabels=False)

etiquetas y tick del mapa de calor

 

Establecer las etiquetas del eje y en un mapa de calor

Puede agregar la etiqueta en el eje y al utilizar el atributo ylabel de Matplotlib como se muestra:

>>> data = np.random.rand(4, 6)

>>> heat_map = sb.heatmap(data)

>>> plt.ylabel('Values on Y axis')

utilizar el atributo ylabel

 

Cambiar el color del mapa de calor

Puede cambiar el color del mapa de calor de seaborn utilizando el atributo de cmap del mapa de calor.

Considere el código de abajo:

>>> heat_map = sb.heatmap(data, cmap="YlGnBu")

>>> plt.show()

Cambiar el color del mapa de calor

Aquí cmpa equivale Y1GnBu lo cual representa el siguiente color:

Color del mapa de calor

En el mapa de calor de Seaborn, tenemos tres tipos de mapas de color.

  1. Mapa de colores secuenciales
  2. Paleta de color divergente
  3. Datos discretos

Mapa de color secuencial

El mapa de color secuencial es utilizado cuando los datos varían de un menor valor a un mayor valor. El código de colores del mapa de color secuencial puede ser utilizado con la función heatmap() o la función kdeplot().

El mapa de color secuencial contiene los siguientes colores:

Mapa de color secuencial

Esta imagen es tomada de Matplotlib.org.

Paleta secuencial cubehelix

El cubehelix es una forma de mapa de color secuencial. El cubehelix es utilizado cuando el brillo se incrementa linearmente y cuando existe una pequeña diferencia en la tonalidad.

La paleta cubehelix se parece a la siguiente:

Paleta secuencial cubehelix

Puede implementar esta paleta en el código utilizando el atributo cmap:

>>> heat_map = sb.heatmap(data, cmap="cubehelix")

El resultado será:

Usando la paleta cubehelix

Paletea divergente de color

Usted puede utilizar la paleta de color cuando el mayor y menor valor son importante en mapa de calor.

La paleta divergente crea una paleta entre dos colores HUSL. Esto significa que la paleta divergente contiene dos sombras diferentes en un gráfico.

Puede crear la paleta divergente en seaborn como sigue:

import seaborn as sb

import matplotlib.pyplot as plt

>>> sb.palplot(sb.diverging_palette(200, 100, n=11))

>>> plt.show()

Aquí 200 es el valor para la paleta en el lado izquierdo y 100 es el código para la paleta en lado derecho. La variable n define el número de bloques, en nuestro caso, es 11. La paleta será como sigue a continuación:

Paleta divergente

Datos Discretos

En Seaborn, existe una función incorporada llamada mpl_palette la cual retorna patrones discretos de color. El método de mpl_palette mapeara valores en una paleta de color. Esta paleta es un arreglo horizontal.

La paleta divergente se parece a la siguiente:

Diverging palette

Esta salida es lograda utilizando la siguiente línea de código:

>>> sb.palplot(sb.mpl_palette("Set3", 11))

>>> plt.show()

El argumento Set3 es el nombre de la paleta y 11 es el número de colores discretos en la paleta. En el método palplot de seaborn mapeara los valores en un arreglo horizontal de la paleta de color dada.

 

Agregar texto sobre el mapa de calor

Para agregar texto sobre el mapa de calor, podemos utilizar el atributo annot. Si annot es definido como Verdadero, el texto será escrito en cada celda. Si las etiquetas para cada celda son definidas, puede asignar la etiqueta con el atributo annot.

Considere el siguiente código:

>>> data = np.random.rand(4, 6)

>>> heat_map = sb.heatmap(data, annot=True)

>>> plt.show()

El resultado será como sigue:

Agregar texto sobre el mapa de calor

Podemos personalizar el valor annot como veremos posteriormente.

Ajustar el tamaño de fuente del mapa de calor

Podemos ajustar el tamaño de fuente del texto del mapa de calor al utilizar el atributo Font_scale de seaborn así:

>>> sb.set(font_scale=2)

Ahora define y muestra el mapa de calor:

>>> heat_map = sb.heatmap(data, annot=True)

>>> plt.show()

El mapa de calor se mostrará como el siguiente luego de incrementar el tamaño:

Ajustar el tamaño de fuente del mapa de calor

 

Barra de colores del mapa de color Seaborn

La barra de color en el mapa de calor se parece a la que está a continuación:

Barra de colores del mapa de color Seaborn

El atributo cbar del mapa de calor es un atributo boolean el cual si es definido como verdadero dice si debe aparecer en el grafico o no. Si el atributo cbar no está definido, la barra de color será mostrada en el grafico por defecto. Para quitar la barra de color, defina el cbar como falso.

>>> heat_map = sb.heatmap(data, annot=True, cbar=False)

>>> plt.show()

Ocultar barra de colores

Para agregar color al título de la barra, podemos utilizar el atributo cbar_kws

El código se parecerá al siguiente:

>>> heat_map = sb.heatmap(data, annot=True, cbar_kws={'label': 'My Colorbar'})

>>> plt.show()

Establecer título de la barra de colores

En el cbar_kws, debemos especificar que atributos de la barra de color nos estamos refiriendo. En nuestro ejemplo, nos estamos refiriendo a la etiqueta (titulo) de la barra de color.

Similarmente, podemos cambiar la orientación de color. La orientación por defecto es vertical como en el ejemplo previo.

Para crear una barra de color horizontal define el atributo de orientación del cbar_kws como sigue:

>>> heat_map = sb.heatmap(data, annot=True, cbar_kws={'label': 'My Colorbar', 'orientation': 'horizontal'})

>>> plt.show()

La barra de color resultante será como la siguiente:

Barra de colores horizontal

 

Cambiar el tamaño de la fuente del mapa de color

Si necesitamos cambiar el tamaño de la fuente de todos los componentes de seaborn, puede utilizar el atributo de seaborn Font_scale.

Vamos a definir la escala a 1.8 y compare la escala 1 con la 1.8:

>>> sb.set(font_scale=1.8)

>>> heat_map = sb.heatmap(data, annot=True, cbar_kws={'label': 'My Colorbar', 'orientation': 'horizontal'})

>>> plt.show()

El resultado de la escala 1:

Tamaño de fuente de barra de color pequeño

Y la escala de 1.8 se mostrará así:

Tamaño de fuente de barra de colores grande

 

Cambiar la rotación del eje tick

Podemos cambiar las etiquetas de tick utilizando el atributo de rotación de las etiquetas ytick o xtick.

Primero, definimos el mapa de calor así:

>>> heat_map = sb.heatmap(data)

>>> plt.show()

Este es un mapa regular con datos aleatorios como definimos en la sección anterior.

Note las etiquetas originales ytick en la siguiente imagen:

Etiquetas originales de ytick

Al rotarlas, primero obtenemos las etiquetas ytick del mapa de calor y luego definimos la rotación como O:

>>> heat_map.set_yticklabels(heat_map.get_yticklabels(), rotation=0)

En el set_yticklabels, pasamos dos argumentos. El primero obtiene que las yticklabels del mapa de calor y el segundo define la orientación. El resultado de la línea de código anterior será como sigue:

Etiquetas rotativas ytick

El atributo de rotación puede ser cualquier ángulo:

>>> heat_map.set_yticklabels(heat_map.get_yticklabels(), rotation=35)

ytick ángulo de rotación

 

Agregar texto y valores en el mapa de calor

En la sección anterior, solo agregamos valores en el mapa de calor. En esta sección, agregaremos valores junto con el texto en el mapa de calor.

Considere el siguiente ejemplo:

Crear datos de prueba aleatorios:

>>> data = np.random.rand(4, 6)

Ahora crearemos un arreglo para el texto que escribiremos en el mapa de calor:

>>> text = np.asarray([['a', 'b', 'c', 'd', 'e', 'f'], ['g', 'h', 'i', 'j', 'k', 'l'], ['m', 'n', 'o', 'p', 'q', 'r'], ['s', 't', 'u', 'v', 'w', 'x']])

Ahora tenemos que combinar el texto con los valores y agregamos el resultado en un mapa de calor como una etiqueta:

>>> labels = (np.asarray(["{0}\n{1:.2f}".format(text,data) for text, data in zip(text.flatten(), data.flatten())])).reshape(4,6)

Okay, aquí hemos pasado los datos en el arreglo de texto y en el arreglo de datos y entonces aplanar ambos arreglos en textos más simples y unirlas con la función zip. El resultando luego es reformado para crear otro arreglo del mismo tamaño el cual ahora contiene ambos texto y datos.

El nuevo arreglo es almacenado en una variable llamada etiquetas. Las variables etiquetas será agregadas al mapa de calor utilizando annot:

>>> heat_map = sb.heatmap(data, annot=labels, fmt='')

El atributo fmt es una string la cual debe ser agregada cuando adicionamos una anotación diferente de verdadero y falso.

En el mapeo de este mapa de calor, el resultado será como sigue:

Agregar texto y valores en el mapa de calor

Trabajar con los mapas de calor de seaborn es muy sencillo. Espero que encuentre este tutorial útil.

Gracias.

Mokhtar Ebrahim
Fundadora de LikeGeeks. Estoy trabajando como administrador de sistemas Linux desde 2010. Soy responsable de mantener, proteger y solucionar problemas de servidores Linux para múltiples clientes de todo el mundo. Me encanta escribir guiones de shell y Python para automatizar mi trabajo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *