はじめに
matplotlibライブラリで作成したヒートマップや等高線図のカラーバーを、オブジェクト指向スタイルで調整する。
オブジェクト指向によるグラフの描画は、複数のグラフをプロットしたときに、どのグラフの描画を調整しているか分かりやすいという利点がある。
環境
ソフトウェア |
バージョン |
Spyder |
3.3.6 |
Python |
3.7.4 |
matplotlib |
3.1.1 |
本記事では、各ライブラリを以下のようにインポートしていることを前提とする。
1
2
|
import numpy as np
import matplotlib.pyplot as plt
|
カラーバーの表示
等高線図やヒートマップにカラーバーを表示するには、Figureオブジェクトのcolorbar
メソッドを用いる。
1
|
Figure.colorbar(mappable, ax=None)
|
主な引数の説明は以下の通り。
mappable
: ヒートマップを描画するpcolorや、等高線図を描画するcontourから返されるオブジェクトである。
ax
: カラーバーを描画するAxesオブジェクトを指定する(任意)。
ヒートマップの例
2つのヒートマップの横に、それぞれカラーバーを表示する。
1
2
3
4
5
6
7
8
9
10
11
12
|
x = np.arange(0,10)
y = np.arange(0,5)
X, Y = np.meshgrid(x, y)
Z = np.arange(50).reshape(len(y), -1)
fig, ax = plt.subplots(ncols=2)
mappable0 = ax[0].pcolor(X, Y, Z, cmap="Blues")
mappable1 = ax[1].pcolor(X, Y, Z, cmap="Reds")
fig.colorbar(mappable0, ax=ax[0])
fig.colorbar(mappable1, ax=ax[1])
fig.tight_layout() # これが無いと表示が少し崩れる
plt.show()
|
結果
等高線図の例
等高線図の横にカラーバーを描画する。
1
2
3
4
5
6
7
8
9
|
x = np.arange(0, 10, 0.1)
y = np.arange(0, 20, 0.1)
X, Y = np.meshgrid(x, y)
Z = np.cos(X)+np.cos(Y)
fig, ax = plt.subplots()
mappable = ax.contour(X, Y, Z, cmap="Blues")
fig.colorbar(mappable)
plt.show()
|
結果
カラーバー中の線の濃さがやや分かりづらいので、プロットされた等高線に数字を表示した方が良いかもしれない。
カラーバーにラベルを追加
以下の手順で、カラーバーにラベルを追加できる。
- Figureオブジェクトの
colorbar
メソッドを実行したときに、戻り値のcolorbarオブジェクトを取得する。
- colorbarオブジェクトの
set_label
メソッドでラベルを設定する。
例
1
2
3
4
5
6
7
8
9
10
|
x = np.arange(0,10)
y = np.arange(0,5)
X, Y = np.meshgrid(x, y)
Z = np.arange(50).reshape(len(y), -1)
fig, ax = plt.subplots()
mappable = ax.pcolor(X, Y, Z, cmap="Blues")
cbar = fig.colorbar(mappable, ax=ax)
cbar.set_label("Value of Z")
plt.show()
|
結果
参考リンク
matplotlib.figure.Figure — Matplotlib 3.3.3 documentation
matplotlib.pyplot.colorbar — Matplotlib 3.3.3 documentation