Mam ramkę danych wygenerowaną z pakietu Pandas Pythona. Jak mogę wygenerować mapę cieplną za pomocą DataFrame z pakietu pandy.
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
>>>
Odpowiedzi:
Chcesz
matplotlib.pcolor
:To daje:
źródło
pcolor
porównaniuimshow
.pcolormesh
zoptymalizowany pod kątem tego rodzaju grafiki.Osobom, które patrzą na to dzisiaj, poleciłbym Seaborn
heatmap()
zgodnie z dokumentacją tutaj .Powyższy przykład zostałby wykonany w następujący sposób:
Gdzie
%matplotlib
jest magiczna funkcja IPythona dla nieznanych osób.źródło
import matplotlib.pyplot as plt
?import matplotlib.pyplot as plt
zamiast%matplotlib inline
i zakończplt.show()
, aby zobaczyć fabułę.Jeśli nie potrzebujesz wykresu na powiedzenie, a jesteś po prostu zainteresowany dodaniem koloru do reprezentowania wartości w formacie tabeli, możesz użyć
style.background_gradient()
metody ramki danych pandy. Ta metoda koloruje tabelę HTML, która jest wyświetlana podczas przeglądania ramek danych pandy w np. JupyterLab Notebook, a wynik jest podobny do użycia „formatowania warunkowego” w oprogramowaniu do obsługi arkuszy kalkulacyjnych:Aby uzyskać szczegółowe informacje, zapoznaj się z bardziej szczegółową odpowiedzią, której udzieliłem wcześniej na ten sam temat, oraz sekcją dotyczącą stylizacji w dokumentacji pand .
źródło
pd.DataFrame([[1, 1], [0, 3]]).style.background_gradient(cmap='summer')
w tabeli zawierającej dwa jedynki, każdy w innym kolorze.axis=None
(od pandy 0.24.0).axis=None
osiąga to i, moim zdaniem, powinno to być częścią twojej odpowiedzi (zwłaszcza, że nie wydaje się być udokumentowane 0 )axis=None
część szczegółowej odpowiedzi, do której odsyłam powyżej, wraz z kilkoma innymi opcjami, ponieważ zgadzam się z tobą, że niektóre z tych opcji umożliwiają powszechnie pożądane zachowanie. Zauważyłem też wczoraj brak dokumentacji i otworzyłem PR .Przydatne
sns.heatmap
API jest tutaj . Sprawdź parametry, jest ich sporo. Przykład:źródło
Jeśli potrzebujesz interaktywnej mapy cieplnej z Pandas DataFrame i korzystasz z notatnika Jupyter, możesz wypróbować interaktywny widżet Clustergrammer-Widget , zobacz interaktywny notatnik w NBViewer tutaj , dokumentacja tutaj
W przypadku większych zbiorów danych możesz wypróbować rozwijany widget Clustergrammer2 WebGL (przykładowy notatnik tutaj )
źródło
Należy pamiętać, że autorzy
seaborn
tylko chcąseaborn.heatmap
pracować z kategorycznych dataframes. To nie jest ogólne.Jeśli twój indeks i kolumny są wartościami liczbowymi i / lub datetime, ten kod będzie ci dobrze służył.
Funkcja mapowania ciepła Matplotlib
pcolormesh
wymaga pojemników zamiast indeksów , więc istnieje jakiś fantazyjny kod do tworzenia pojemników z indeksów ramek danych (nawet jeśli indeks nie jest równomiernie rozmieszczony!).Reszta jest po prostu
np.meshgrid
iplt.pcolormesh
.Nazwij to używając
heatmap(df)
i zobacz, jak to działaplt.show()
.źródło