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
pcolor
frenteimshow
.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
%matplotlib
hay una función mágica de IPython para aquellos que no están familiarizados?fuente
import matplotlib.pyplot as plt
?import matplotlib.pyplot as plt
lugar de%matplotlib inline
y 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=None
logra eso y, en mi opinión, debería ser parte de su respuesta (especialmente porque no parece estar documentado 0 )axis=None
parte 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.heatmap
Api ú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
seaborn
solo quierenseaborn.heatmap
trabajar 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
pcolormesh
requiere 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.meshgrid
yplt.pcolormesh
.Llámelo usando
heatmap(df)
y véalo usandoplt.show()
.fuente