Se il tuo obiettivo principale è quello di visualizzare la matrice di correlazione, piuttosto che creare un grafico di per sé, le convenienti pandas
opzioni di stile sono una soluzione integrata praticabile:
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
Si noti che questo deve essere in un back-end che supporta il rendering HTML, come il Notebook JupyterLab. (Il testo chiaro automatico su sfondi scuri proviene da un PR esistente e non dall'ultima versione rilasciata, pandas
0.23).
Messa in piega
Puoi facilmente limitare la precisione delle cifre:
corr.style.background_gradient(cmap='coolwarm').set_precision(2)
Oppure elimina del tutto le cifre se preferisci la matrice senza annotazioni:
corr.style.background_gradient(cmap='coolwarm').set_properties(**{'font-size': '0pt'})
La documentazione relativa allo stile include anche istruzioni su stili più avanzati, come ad esempio come modificare la visualizzazione della cella su cui è posizionato il puntatore del mouse. Per salvare l'output è possibile restituire l'HTML aggiungendo il render()
metodo e quindi scriverlo in un file (o semplicemente fare uno screenshot per scopi meno formali).
Confronto temporale
Nei miei test, sono style.background_gradient()
stato 4 volte più veloce di plt.matshow()
e 120 volte più veloce rispetto sns.heatmap()
a una matrice 10x10. Sfortunatamente non si adatta bene plt.matshow()
: i due impiegano all'incirca lo stesso tempo per una matrice 100x100 ed plt.matshow()
è 10 volte più veloce per una matrice 1000x1000.
Salvataggio
Esistono alcuni modi possibili per salvare il frame di dati stilizzato:
- Restituisce il codice HTML aggiungendo il
render()
metodo e quindi scrivere l'output in un file.
- Salvare come
.xslx
file con formattazione condizionale aggiungendo il fileto_excel()
metodo.
- Combina con imgkit per salvare una bitmap
- Fai uno screenshot (per scopi meno formali).
Aggiornamento per i panda> = 0,24
Impostando axis=None
, ora è possibile calcolare i colori in base all'intera matrice anziché per colonna o per riga:
corr.style.background_gradient(cmap='coolwarm', axis=None)