Ich habe einen Datenrahmen aus Pythons Pandas-Paket generiert. Wie kann ich eine Heatmap mit DataFrame aus dem Pandas-Paket erstellen?
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
>>>
Antworten:
Sie wollen
matplotlib.pcolor
:Das gibt:
quelle
pcolor
vs.imshow
.pcolormesh
, das für diese Art von Grafik optimiert ist.Für Leute, die sich das heute ansehen, würde ich das Seaborn empfehlen,
heatmap()
wie hier dokumentiert .Das obige Beispiel würde wie folgt durchgeführt:
Wo
%matplotlib
ist eine IPython-Zauberfunktion für Unbekannte?quelle
import matplotlib.pyplot as plt
?import matplotlib.pyplot as plt
anstelle von%matplotlib inline
und beenden Sie mit,plt.show()
um die Handlung tatsächlich zu sehen.Wenn Sie kein Plot per say benötigen und einfach nur Farbe hinzufügen möchten, um die Werte in einem Tabellenformat darzustellen, können Sie die
style.background_gradient()
Methode des Pandas-Datenrahmens verwenden. Diese Methode färbt die HTML-Tabelle ein, die beim Anzeigen von Pandas-Datenrahmen im JupyterLab-Notizbuch angezeigt wird. Das Ergebnis ähnelt der Verwendung der "bedingten Formatierung" in der Tabellenkalkulationssoftware:Ausführliche Informationen zur Verwendung finden Sie in der ausführlicheren Antwort, die ich zuvor zum gleichen Thema gegeben habe, und im Abschnitt zum Styling der Pandas-Dokumentation .
quelle
pd.DataFrame([[1, 1], [0, 3]]).style.background_gradient(cmap='summer')
zu einer Tabelle mit zwei Einsen führt, von denen jede eine andere Farbe hat.axis=None
(seit Pandas 0.24.0).axis=None
erreicht und sollte meiner Meinung nach Teil Ihrer Antwort sein (zumal es nicht dokumentiert zu sein scheint 0 )axis=None
Teil der detaillierten Antwort, auf die ich oben verweise , zusammen mit einigen anderen Optionen gemacht, da ich Ihnen zustimme, dass einige dieser Optionen häufig gewünschtes Verhalten ermöglichen. Ich habe gestern auch den Mangel an Dokumentation bemerkt und eine PR eröffnet .Nützliche
sns.heatmap
API ist hier . Überprüfen Sie die Parameter, es gibt eine gute Anzahl von ihnen. Beispiel:quelle
Wenn Sie eine interaktive Heatmap von einem Pandas DataFrame möchten und ein Jupyter-Notizbuch ausführen, können Sie das interaktive Widget Clustergrammer-Widget ausprobieren. Das interaktive Notizbuch in NBViewer finden Sie hier , die Dokumentation hier
Für größere Datenmengen können Sie das in der Entwicklung befindliche Clustergrammer2- WebGL-Widget (Beispielnotizbuch hier ) ausprobieren.
quelle
Bitte beachten Sie, dass die Autoren
seaborn
nur wollenseaborn.heatmap
mit kategorischen Datenrahmen an der Arbeit. Es ist nicht allgemein.Wenn Ihr Index und Ihre Spalten numerische Werte und / oder Datums- / Uhrzeitwerte sind, ist dieser Code für Sie von Vorteil.
Für die Matplotlib-Heat-Mapping-Funktion
pcolormesh
sind Bins anstelle von Indizes erforderlich. Daher gibt es einen ausgefallenen Code zum Erstellen von Bins aus Ihren Dataframe-Indizes (auch wenn Ihr Index nicht gleichmäßig verteilt ist!).Der Rest ist einfach
np.meshgrid
undplt.pcolormesh
.Nennen Sie es mit
heatmap(df)
und sehen Sie es mitplt.show()
.quelle