Matplotlib nâng cao

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

Matplotlib
Chạy code →
main.py
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()
Lấy nút Run cho ví dụ này Biểu đồ mà đoạn code này vẽ ra
Heatmap với imshow và bảng màu