JavaScriptを有効にしてください

Matplotlibのオブジェクト指向なカラーバーの表示

 ·   2 min read

はじめに

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()

結果
colorbar_pcolor

等高線図の例

等高線図の横にカラーバーを描画する。

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()

結果
colorbar_contour

カラーバー中の線の濃さがやや分かりづらいので、プロットされた等高線に数字を表示した方が良いかもしれない。

カラーバーにラベルを追加

以下の手順で、カラーバーにラベルを追加できる。

  1. Figureオブジェクトのcolorbarメソッドを実行したときに、戻り値のcolorbarオブジェクトを取得する。
  2. 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()

結果
colorbar_label

参考リンク

matplotlib.figure.Figure — Matplotlib 3.3.3 documentation
matplotlib.pyplot.colorbar — Matplotlib 3.3.3 documentation

シェアする

Helve
WRITTEN BY
Helve
関西在住、電機メーカ勤務のエンジニア。Twitterで新着記事を配信中です