Tengo un marco de datos generado a partir del paquete Pandas de Python. ¿Cómo puedo generar un mapa de calor usando DataFrame del paquete pandas?
import numpy as np
from pandas import *
Index= ['aaa','bbb','ccc','ddd','eee']
Cols = ['A', 'B', 'C','D']
df = DataFrame(abs(np.random.randn(5, 4)), index= Index, columns=Cols)
>>> df
A B C D
aaa 2.431645 1.248688 0.267648 0.613826
bbb 0.809296 1.671020 1.564420 0.347662
ccc 1.501939 1.126518 0.702019 1.596048
ddd 0.137160 0.147368 1.504663 0.202822
eee 0.134540 3.708104 0.309097 1.641090
>>>

Respuestas:
Quieres
matplotlib.pcolor:Esto da:
fuente
pcolorfrenteimshow.pcolormesh, que está optimizado para este tipo de gráficos.Para las personas que miran esto hoy, recomendaría el Seaborn
heatmap()como se documenta aquí .El ejemplo anterior se haría de la siguiente manera:
¿Dónde
%matplotlibhay una función mágica de IPython para aquellos que no están familiarizados?fuente
import matplotlib.pyplot as plt?import matplotlib.pyplot as pltlugar de%matplotlib inliney termine conplt.show()para ver realmente la trama.Si no necesita un gráfico por decir, y simplemente está interesado en agregar color para representar los valores en un formato de tabla, puede usar el
style.background_gradient()método del marco de datos de pandas. Este método da color a la tabla HTML que se muestra al visualizar los marcos de datos de pandas en, por ejemplo, el JupyterLab Notebook y el resultado es similar al uso de "formato condicional" en el software de hoja de cálculo:Para un uso detallado, consulte la respuesta más elaborada que proporcioné sobre el mismo tema anteriormente y la sección de estilo de la documentación de pandas .
fuente
pd.DataFrame([[1, 1], [0, 3]]).style.background_gradient(cmap='summer')da como resultado una tabla con dos, cada uno de ellos con un color diferente.axis=None(desde pandas 0.24.0).axis=Nonelogra eso y, en mi opinión, debería ser parte de su respuesta (especialmente porque no parece estar documentado 0 )axis=Noneparte de la respuesta detallada que enlazo arriba, junto con algunas otras opciones porque estoy de acuerdo con usted en que algunas de estas opciones permiten el comportamiento comúnmente deseado. También me di cuenta de la falta de documentación ayer y abrí un PR .sns.heatmapApi útil está aquí . Mira los parámetros, hay un buen número de ellos. Ejemplo:fuente
Si desea un mapa de calor interactivo de un Pandas DataFrame y está ejecutando un cuaderno Jupyter, puede probar el widget interactivo Clustergrammer-Widget , vea el cuaderno interactivo en NBViewer aquí , la documentación aquí
Y para conjuntos de datos más grandes, puede probar el widget WebGL de Clustergrammer2 en desarrollo (cuaderno de ejemplo aquí )
fuente
Tenga en cuenta que los autores de
seabornsolo quierenseaborn.heatmaptrabajar con marcos de datos categóricos. No es general.Si su índice y columnas son valores numéricos y / o de fecha y hora, este código le servirá bien.
La función de mapeo de calor de Matplotlib
pcolormeshrequiere bins en lugar de índices , por lo que hay un código elegante para construir bins a partir de los índices de su marco de datos (¡incluso si su índice no está espaciado uniformemente!).El resto es simple
np.meshgridyplt.pcolormesh.Llámelo usando
heatmap(df)y véalo usandoplt.show().fuente