Heatmap với imshow và bảng màu
Vẽ heatmap cho một bảng hai chiều bằng ax.imshow, bảng màu, thanh màu và giá trị trong từng ô.
Giới thiệu
Heatmap tô màu từng ô của bảng theo giá trị của nó, nên các quy luật theo hàng và cột hiện ra ngay. ax.imshow vẽ một mảng hai chiều thành các ô màu, bảng màu (cmap) đổi số thành màu, còn fig.colorbar hiển thị thang màu.
visits là mảng 7 × 6: mỗi hàng là một ngày, mỗi cột là một khung giờ. imshow vẽ hàng 0 ở trên cùng, còn set_xticks / set_yticks đặt tên cho cột và hàng. Vòng lặp lồng nhau viết giá trị vào từng ô bằng ax.text(cột, hàng, ...). Bảng màu tuần tự như viridis hợp với giá trị từ thấp đến cao; bảng màu phân kỳ như coolwarm hợp với giá trị lệch hai phía quanh một mức giữa.
Trình mô phỏng tương tác
Thử các bảng màu (colormap) khác, ẩn số và thanh màu. Bảng màu tốt giúp phân biệt giá trị cao thấp dễ dàng.
Ví dụ Matplotlib chạy được
import matplotlib.pyplot as plt
import numpy as np
days = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
hours = ["6am", "9am", "12pm", "3pm", "6pm", "9pm"]
rng = np.random.default_rng(2)
visits = rng.integers(5, 60, size=(len(days), len(hours)))
fig, ax = plt.subplots(figsize=(7, 4))
image = ax.imshow(visits, cmap="viridis")
ax.set_xticks(range(len(hours)), hours)
ax.set_yticks(range(len(days)), days)
for row in range(len(days)):
for col in range(len(hours)):
ax.text(col, row, visits[row, col], ha="center", va="center", color="white", fontsize=8)
fig.colorbar(image, label="Visits")
ax.set_title("Website visits by day and hour")
plt.show()
