Saya ingin membuat peta panas seperti ini (ditampilkan pada FlowingData ):
Data sumber ada di sini , tetapi data dan label acak akan baik-baik saja digunakan, yaitu
import numpy
column_labels = list('ABCD')
row_labels = list('WXYZ')
data = numpy.random.rand(4,4)
Membuat peta panas cukup mudah di matplotlib:
from matplotlib import pyplot as plt
heatmap = plt.pcolor(data)
Dan saya bahkan menemukan file argumen peta warna yang terlihat benar:heatmap = plt.pcolor(data, cmap=matplotlib.cm.Blues)
Namun di luar itu, saya tidak tahu cara menampilkan label untuk kolom dan baris dan menampilkan data dalam orientasi yang tepat (asal di kiri atas, bukan di kiri bawah).
Upaya untuk memanipulasi heatmap.axes
(misalnya heatmap.axes.set_xticklabels = column_labels
) semuanya gagal. Apa yang kulewatkan di sini?
python
matplotlib
data-visualization
heatmap
Jason Sundram
sumber
sumber
Jawaban:
Ini terlambat, tetapi ini adalah implementasi python saya dari peta panas NBA data mengalir.
diperbarui: 1/4/2014 : terima kasih semuanya
Outputnya terlihat seperti ini:
Ada notebook ipython dengan semua kode ini di sini . Saya telah belajar banyak dari 'overflow jadi semoga seseorang akan menganggap ini berguna.
sumber
pcolor
seperti ini tetapi itu memiliki nilai numerik yang ditampilkan juga. ATAU: Saya ingin membuat matplotlibtable
yang mewarnai selnya. Saya telah melihat solusi untuk masalah lain, dan mereka jelek secara estetika. Ini tampak hebat, jika saja saya tahu cara melapisi angka-angka itu.Modul python seaborn didasarkan pada matplotlib, dan menghasilkan peta panas yang sangat bagus.
Di bawah ini adalah implementasi dengan seaborn, dirancang untuk notebook ipython / jupyter.
Outputnya terlihat seperti ini: Saya menggunakan peta warna blues matplotlib, tetapi secara pribadi menemukan warna default cukup indah. Saya menggunakan matplotlib untuk memutar label sumbu x, karena saya tidak dapat menemukan sintaks seaborn. Seperti dicatat oleh grexor, itu perlu untuk menentukan dimensi (fig.set_size_inches) dengan coba-coba, yang menurut saya agak membuat frustrasi.
Seperti dicatat oleh Paul H, Anda dapat dengan mudah menambahkan nilai ke peta panas (annot = True), tetapi dalam kasus ini saya tidak berpikir itu meningkatkan angka. Beberapa potongan kode diambil dari jawaban yang sangat bagus oleh joelotz.
sumber
Masalah utamanya adalah Anda harus terlebih dahulu mengatur lokasi tanda x dan y Anda. Juga, ini membantu untuk menggunakan antarmuka yang lebih berorientasi objek ke matplotlib. Yakni, berinteraksi dengan
axes
objek secara langsung.Semoga membantu.
sumber
heatmap.axes
properti, yang karena alasan tertentu tidak melakukan apa-apa.ax.xaxis.set_label_position('top')
tidak berhasil.annot=True
saat dipanggil ( stanford.edu/~mwaskom/software/seaborn/generated/… )Seseorang mengedit pertanyaan ini untuk menghapus kode yang saya gunakan, jadi saya terpaksa menambahkannya sebagai jawaban. Terima kasih untuk semua yang berpartisipasi dalam menjawab pertanyaan ini! Saya pikir sebagian besar jawaban lain lebih baik daripada kode ini, saya meninggalkan ini di sini untuk tujuan referensi.
Dengan terima kasih kepada Paul H , dan unutbu (yang menjawab pertanyaan ini ), saya memiliki beberapa keluaran yang terlihat cukup bagus:
Dan inilah hasilnya:
sumber