Helve’s Python memo

Pythonを使った機械学習やデータ分析の備忘録

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

matplotlibライブラリで作成したヒートマップや等高線図のカラーバーを、オブジェクト指向スタイルで調整する。
オブジェクト指向によるグラフの描画は、複数のグラフをプロットしたときに、どのグラフの描画を調整しているか分かりやすいという利点がある。

matplotlibの基本的なオブジェクトと、グラフ作成については以下ページを参照。
<matplotlib> オブジェクト指向なグラフ作成 - Helve’s Python memo

目次

環境

Spyder 3.2.8
Python 3.6.5
matplotlib 2.2.2

本記事では、各ライブラリを以下のようにインポートしていることを前提とする。

import numpy as np
import matplotlib.pyplot as plt

カラーバーの表示

等高線図やヒートマップにカラーバーを表示するには、Figureオブジェクトのcolorbarメソッドを用いる。

Figure.colorbar(mappable, ax=None)

主な引数の説明は以下の通り。

mappable: ヒートマップを描画するpcolorや、等高線図を描画するcontourから返されるオブジェクトである。
ax: カラーバーを描画するAxesオブジェクトを指定する(任意)。

ヒートマップの例

2つのヒートマップの横に、それぞれカラーバーを表示する。

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

結果
f:id:Helve:20180805181712p:plain

等高線図の例

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

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

結果
f:id:Helve:20180805181748p:plain

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

参考リンク

matplotlib.figure.Figure — Matplotlib 2.2.2 documentation

以下の本ではmatplotlibを使ったグラフ作成について詳しい。また、オブジェクト指向スタイルでのグラフの作成・調整についても解説されている。