Wenn Ihr Hauptziel darin besteht, die Korrelationsmatrix zu visualisieren, anstatt ein Diagramm an sich zu erstellen, sind die praktischen pandas
Gestaltungsoptionen eine praktikable integrierte Lösung:
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
Beachten Sie, dass dies in einem Backend erfolgen muss, das das Rendern von HTML unterstützt, z. B. im JupyterLab-Notizbuch. (Der automatische helle Text auf dunklem Hintergrund stammt aus einer vorhandenen PR und nicht aus der neuesten veröffentlichten Version pandas
0.23).
Styling
Sie können die Zifferngenauigkeit leicht einschränken:
corr.style.background_gradient(cmap='coolwarm').set_precision(2)
Oder entfernen Sie die Ziffern ganz, wenn Sie die Matrix ohne Anmerkungen bevorzugen:
corr.style.background_gradient(cmap='coolwarm').set_properties(**{'font-size': '0pt'})
Die Styling-Dokumentation enthält auch Anweisungen zu erweiterten Styles, z. B. zum Ändern der Anzeige der Zelle, über der sich der Mauszeiger befindet. Um die Ausgabe zu speichern, können Sie den HTML-Code zurückgeben, indem Sie die render()
Methode anhängen und dann in eine Datei schreiben (oder einfach einen Screenshot für weniger formale Zwecke erstellen).
Zeitvergleich
In meinen Tests style.background_gradient()
war 4x schneller als plt.matshow()
und 120x schneller als sns.heatmap()
mit einer 10x10 Matrix. Leider skaliert es nicht so gut wie plt.matshow()
: Die beiden benötigen für eine 100x100-Matrix ungefähr die gleiche Zeit und sind für eine 1000x1000-Matrix plt.matshow()
10x schneller.
Sparen
Es gibt verschiedene Möglichkeiten, den stilisierten Datenrahmen zu speichern:
- Geben Sie den HTML-Code zurück, indem Sie die
render()
Methode anhängen , und schreiben Sie die Ausgabe in eine Datei.
- Speichern Sie als
.xslx
Datei mit bedingter Formatierung, indem Sie die to_excel()
Methode anhängen .
- Kombiniere es mit imgkit, um eine Bitmap zu speichern
- Machen Sie einen Screenshot (für weniger formelle Zwecke).
Update für Pandas> = 0,24
Durch Einstellen axis=None
ist es jetzt möglich, die Farben basierend auf der gesamten Matrix anstatt pro Spalte oder pro Zeile zu berechnen:
corr.style.background_gradient(cmap='coolwarm', axis=None)