Si su objetivo principal es visualizar la matriz de correlación, en lugar de crear un gráfico per se, las pandas
opciones de estilo convenientes son una solución integrada viable:
import pandas as pd
import numpy as np
rs = np.random.RandomState(0)
df = pd.DataFrame(rs.rand(10, 10))
corr = df.corr()
corr.style.background_gradient(cmap='coolwarm')
# 'RdBu_r' & 'BrBG' are other good diverging colormaps
Tenga en cuenta que esto debe estar en un back-end que admita la representación de HTML, como el JupyterLab Notebook. (El texto claro automático sobre fondos oscuros es de un RP existente y no de la última versión lanzada, pandas
0.23).
Estilo
Puede limitar fácilmente la precisión de los dígitos:
corr.style.background_gradient(cmap='coolwarm').set_precision(2)
O elimine los dígitos por completo si prefiere la matriz sin anotaciones:
corr.style.background_gradient(cmap='coolwarm').set_properties(**{'font-size': '0pt'})
La documentación de estilo también incluye instrucciones de estilos más avanzados, como cómo cambiar la visualización de la celda sobre la que se mueve el puntero del mouse. Para guardar el resultado, puede devolver el HTML agregando el render()
método y luego escribirlo en un archivo (o simplemente tomar una captura de pantalla para fines menos formales).
Comparación de tiempo
En mis pruebas, style.background_gradient()
fue 4 veces más rápido plt.matshow()
y 120 veces más rápido que sns.heatmap()
con una matriz de 10x10. Desafortunadamente, no escala tan bien como plt.matshow()
: los dos toman aproximadamente el mismo tiempo para una matriz de 100x100, y plt.matshow()
es 10 veces más rápido para una matriz de 1000x1000.
Ahorro
Hay algunas formas posibles de guardar el marco de datos estilizado:
- Devuelva el HTML agregando el
render()
método y luego escriba el resultado en un archivo.
- Guarde como un
.xslx
archivo con formato condicional agregando el to_excel()
método.
- Combinar con imgkit para guardar un mapa de bits
- Tome una captura de pantalla (para fines menos formales).
Actualización para pandas> = 0.24
Al configurar axis=None
, ahora es posible calcular los colores en función de toda la matriz en lugar de por columna o por fila:
corr.style.background_gradient(cmap='coolwarm', axis=None)