Chciałbym zrobić taką mapę cieplną (pokazaną na FlowingData ):
Dane źródłowe są tutaj , ale losowe dane i etykiety byłyby w porządku, tj
import numpy
column_labels = list('ABCD')
row_labels = list('WXYZ')
data = numpy.random.rand(4,4)
Tworzenie mapy cieplnej jest dość łatwe w matplotlib:
from matplotlib import pyplot as plt
heatmap = plt.pcolor(data)
I nawet znalazłem argumenty w mapie kolorów, które wyglądają dobrze:heatmap = plt.pcolor(data, cmap=matplotlib.cm.Blues)
Ale poza tym nie mogę dowiedzieć się, jak wyświetlać etykiety dla kolumn i wierszy oraz wyświetlać dane w odpowiedniej orientacji (początek w lewym górnym rogu zamiast w lewym dolnym rogu).
Wszystkie próby manipulacji heatmap.axes
(np. heatmap.axes.set_xticklabels = column_labels
) Zawiodły. Czego tu brakuje?
python
matplotlib
data-visualization
heatmap
Jason Sundram
źródło
źródło
Odpowiedzi:
To już późno, ale oto moja implementacja mapy cieplnej NBA flowingdata w języku Python.
aktualizacja: 1/4/2014 : dzięki wszystkim
Wynik wygląda następująco:
Jest takie notebook ipython ze wszystkimi tego kodu tutaj . Wiele się nauczyłem od „przepełnienia”, więc mam nadzieję, że ktoś uzna to za przydatne.
źródło
pcolor
takiego, ale ma też pokazane wartości liczbowe. LUB: Chcę stworzyć matplotlib,table
który koloruje swoje komórki. Widziałem rozwiązania drugiego problemu i są one brzydkie estetycznie. Wygląda to świetnie, gdybym tylko wiedział, jak nałożyć cyfry.Moduł python seaborn jest oparty na matplotlib i tworzy bardzo ładną mapę cieplną.
Poniżej znajduje się realizacja z seabornem, zaprojektowana dla notebooka ipython / jupyter.
Wynik wygląda następująco: użyłem mapy kolorów matplotlib Blues, ale osobiście uważam, że domyślne kolory są całkiem piękne. Użyłem matplotlib do obrócenia etykiet osi X, ponieważ nie mogłem znaleźć składni morskiej. Jak zauważył grexor, konieczne było określenie wymiarów (rys. Set_size_inches) metodą prób i błędów, co było trochę frustrujące.
Jak zauważył Paul H, możesz łatwo dodać wartości do map ciepła (adnotacja = True), ale w tym przypadku nie sądziłem, że poprawiło to wartość. Kilka fragmentów kodu zostało zaczerpniętych z doskonałej odpowiedzi Joelotza.
źródło
Głównym problemem jest to, że najpierw musisz ustawić lokalizację swoich znaczników x i y. Ponadto matplotlib pomaga używać bardziej zorientowanego obiektowo interfejsu. Mianowicie wejdź w interakcję
axes
bezpośrednio z obiektem.Mam nadzieję, że to pomoże.
źródło
heatmap.axes
nieruchomości, która z jakiegoś powodu nic nie robi.ax.xaxis.set_label_position('top')
bezskutecznie.annot=True
po wywołaniu ( stanford.edu/~mwaskom/software/seaborn/generated/… )Ktoś zredagował to pytanie, aby usunąć kod, którego użyłem, więc byłem zmuszony dodać to jako odpowiedź. Dziękujemy wszystkim, którzy wzięli udział w udzieleniu odpowiedzi na to pytanie! Myślę, że większość innych odpowiedzi jest lepszych niż ten kod, zostawiam to tutaj w celach informacyjnych.
Dzięki Paulowi H. i unutbu (który odpowiedział na to pytanie ), mam całkiem ładnie wyglądające wyjście:
A oto wynik:
źródło