Matplotlibのヒートマップ#

※記事内に商品プロモーションを含むことがあります。

公開日

参考

Seabornを使用してヒートマップを出力する場合、Seabornのヒートマップを参照ください。

Matplotlibでヒートマップを出力するには、ax.pcolorを使用します。ax.pcolorの最初の引数に2次元配列を与えます。

import numpy as np
import matplotlib.pyplot as plt

C = np.arange(50).reshape(5, 10)

fig, ax = plt.subplots()
ax.pcolor(C)
plt.show()
../_images/9008b475b9ca7b61fab0049663a7ec9bbda9881705f4e143d27cc1f8c149aa54.png

ここで、Cは以下のような5行10列の2次元配列です。ヒートマップも5行10列で出力されています。

C
array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9],
       [10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
       [20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
       [30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
       [40, 41, 42, 43, 44, 45, 46, 47, 48, 49]])

カラーマップの指定#

cmapオプションでカラーマップを指定します。

fig, ax = plt.subplots()
ax.pcolor(C, cmap="Reds")
plt.show()
../_images/e98401161fa4709872ce525e401bd4cb52a13f93d2081dc40b3198c9bbbd8dd7.png

指定可能なカラーマップについては、以下のページも参照下さい。

Matplotlibのカラーマップ

カラーバーを表示する場合、plt.colorbarを使用します。ax.pcolorの戻り値はPolyCollectionというクラスのオブジェクトです。これをplt.colorbarの最初の引数とします。また、axオプションにカラーバーを表示するグラフ(ここではax)を指定します。

fig, ax = plt.subplots()
mappable = ax.pcolor(C, cmap="Reds")
plt.colorbar(mappable, ax=ax)
plt.show()
../_images/8ef089cadafc9a174bc8e228653c18643c14b5852fcf9817a5c16b7af1ef5e24.png

表示するカラーマップの範囲を固定したい場合、最小値と最大値をそれぞれvmin, vmaxで指定します。

カラーバーにラベルを付ける場合、plt.colorbarの戻り値を取得(以下ではcbarとしています)し、この戻り値のset_labelメソッドを使用します。

fig, ax = plt.subplots()
mappable = ax.pcolor(C, cmap="Reds", vmin=10, vmax=40)
cbar = plt.colorbar(mappable, ax=ax)
cbar.set_label('Value')
plt.show()
../_images/0316b684999c336b133459e3536c63bf50ef6fe5e9c5a502472ca8733e793a94.png

目盛りの指定#

ヒートマップの横幅と縦軸の目盛りを指定する場合、以下のようにax.pcolorの1, 2番目の引数に配列として与えます。また、shading="auto"と指定します(この指定は必須ではありませんが、省略すると警告が出ます)。

X = np.arange(5,15) # 横幅の目盛り
Y = np.arange(5,10) # 縦幅の目盛り

fig, ax = plt.subplots()
ax.pcolor(X, Y, C, shading="auto")
plt.show()
../_images/28aae3f0cc3c543c65c8dd09fcdf7c059d159640f8fefc972ac7b6ab6f1cd50e.png

y軸の反転#

y軸の上下を反転させる場合、ax.invert_yaxis()メソッドを用います。

fig, ax = plt.subplots()
ax.pcolor(C)
ax.invert_yaxis()
plt.show()
../_images/dd0960852415a18615904d014c8a3aa8821afa38e9ca4b3b298292054c84ab5f.png

同様にx軸の左右を反転させる場合、ax.invert_xaxis()メソッドを用います。

軸ラベル、タイトルの追加#

x, y軸のラベルはそれぞれax.set_xlabel, ax.set_ylabelで追加できます。また、グラフの上部にタイトルを追加する場合、ax.set_titleメソッドを使います。

fig, ax = plt.subplots()
ax.pcolor(C)
ax.set_xlabel("x axis")
ax.set_ylabel("y axis")
ax.set_title("Heatmap")
plt.show()
../_images/3ac69430dfce275fe1935956c6e9280517d659e048d8a79ce88a578e1385255a.png