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, pandas0.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
.xslxfile 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)
