imshow とカラーマップでヒートマップ
ax.imshow、カラーマップ、カラーバー、各セルの値で、2次元の表をヒートマップにします。
はじめに
ヒートマップは表の各セルを値に応じて色分けするので、行や列のパターンがひと目でわかります。ax.imshow は2次元配列を色付きのセルとして描き、カラーマップ (cmap) が数値を色に変え、fig.colorbar が色の目盛りを表示します。
visits は 7 × 6 の配列で、行が曜日、列が時間帯です。imshow は行 0 を一番上に描き、set_xticks と set_yticks で列と行に名前を付けます。二重ループは ax.text(列, 行, ...) で各セルに値を書きます。viridis のような順序的なカラーマップは小さい値から大きい値へ、coolwarm のような発散型は中央の値より上か下かを表すのに向いています。
インタラクティブ ビジュアライザー
別のカラーマップを試し、数値とカラーバーを隠してみましょう。良いカラーマップは高い値と低い値を見分けやすくします。
実行できる Matplotlib の例
Matplotlib
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()
