Un mapa de calor es una representación gráfica de datos donde los valores se representan por color. Facilitan la comprensión de datos complejos de un vistazo. Los mapas de calor se pueden dibujar fácilmente usando seaborn en python. En este artículo, vamos a agregar un marco a una figura de mapa de calor nacida en el mar en Python.
Sintaxis: seaborn.heatmap(data, *, vmin=Ninguno, vmax=Ninguno, cmap=Ninguno, center=Ninguno, annot_kws=Ninguno, linewidths=0, linecolor=’white’, cbar=True, **kwargs)
Parámetros importantes:
- datos: conjunto de datos 2D que se puede convertir en un ndarray.
- linewidths: Ancho de las líneas que dividirán cada celda.
- linecolor: Color de las líneas que dividirán cada celda.
- cbar: Ya sea para dibujar una barra de colores.
Todos los parámetros excepto los datos son opcionales.
Devuelve: un objeto de tipo matplotlib.axes._subplots.AxesSubplot
Crear un mapa de calor
Para dibujar el mapa de calor, utilizaremos el conjunto de datos incorporado de seaborn. Seaborn tiene muchos conjuntos de datos integrados como titanic.csv, penguins.csv, flight.csv, exercise.csv. También podemos hacer que nuestro conjunto de datos sea simplemente un ndarray rectangular.
Python3
# Import libraries import seaborn as sns import matplotlib.pyplot as plt # Preparing dataset example = sns.load_dataset("flights") example = example.pivot("month", "year", "passengers") # Creating plot res = sns.heatmap(example) # show plot plt.show()
Producción:
Hay dos formas de dibujar el marco alrededor de un mapa de calor:
- Usando axhline y axvline.
- Uso de lomos (más óptimo)
Método 1: Usar axhline y axvline
La función Axes.axhline() y Axes.axvline() en el módulo de ejes de la biblioteca matplotlib se usa para agregar una línea horizontal y vertical a través del eje respectivamente.
Podemos dibujar dos líneas horizontales desde y=0 y desde y= número de filas en nuestro conjunto de datos y dibujará un marco que cubre dos lados de nuestro mapa de calor. Luego, podemos dibujar dos líneas verticales desde x = 0 y x = número de columnas en nuestro conjunto de datos y dibujará un marco que cubra los dos lados restantes para que nuestro mapa de calor tenga un marco completo.
Nota: No es una forma óptima de dibujar un marco, ya que cuando aumentamos el ancho de la línea no se considera cuando se superpone al mapa de calor.
Ejemplo 1.
Python3
# Import libraries import seaborn as sns import matplotlib.pyplot as plt # Preparing dataset example = sns.load_dataset("flights") example = example.pivot("month", "year", "passengers") # Creating plot res = sns.heatmap(example, cmap = "BuPu") # Drawing the frame res.axhline(y = 0, color='k',linewidth = 10) res.axhline(y = example.shape[1], color = 'k', linewidth = 10) res.axvline(x = 0, color = 'k', linewidth = 10) res.axvline(x = example.shape[0], color = 'k', linewidth = 10) # show plot plt.show()
Producción:
Ejemplo 2:
Python3
# Import libraries import seaborn as sns import matplotlib.pyplot as plt import numpy as np # Preparing dataset example = np.random.rand(10, 12) # Creating plot res = sns.heatmap(example, cmap = "magma", linewidths = 0.5) # Drawing the frame res.axhline(y = 0, color = 'k', linewidth = 15) res.axhline(y = 10, color = 'k', linewidth = 15) res.axvline(x = 0, color = 'k', linewidth = 15) res.axvline(x = 12, color = 'k', linewidth = 15) # show plot plt.show()
Producción:
Método 2: Usando espinas
Las espinas son las líneas que conectan las marcas del eje y señalan los límites del área de datos. Se pueden colocar en posiciones arbitrarias.
Ejemplo 1:
El ancho de la línea se puede cambiar usando el parámetro set_linewidth que acepta un valor flotante como argumento.
Python3
# Import libraries import seaborn as sns import matplotlib.pyplot as plt # Preparing dataset example = sns.load_dataset("flights") example = example.pivot("month", "year", "passengers") # Creating plot res = sns.heatmap(example, cmap = "Purples") # Drawing the frame for _, spine in res.spines.items(): spine.set_visible(True) spine.set_linewidth(5) # show plot plt.show()
Producción:
Ejemplo 2:
Podemos especificar el estilo del marco usando el parámetro set_linestyle del lomo (sólido, discontinuo, discontinuo, punteado).
Python3
# Import libraries import seaborn as sns import matplotlib.pyplot as plt import numpy as np # Preparing dataset example = np.random.rand(10, 12) # Creating plot res = sns.heatmap(example, cmap = "Greens", linewidths = 2, linecolor = "white") # Drawing the frame for _, spine in res.spines.items(): spine.set_visible(True) spine.set_linewidth(3) spine.set_linestyle("dashdot") # show plot plt.show()
Producción: