【matplotlib】カラーバー中心の値を指定する

カラーマップを描く際に必要なカラーバー。

ときに、カラーバーの中心を指定したい場合があります。

どのようなときか

正負の値が混ざったカラーマップを描画するとなると、正の値、負の値がわかりやすい配色である必要があります。

そういった場合、matplotlibでは、パラメータcmapをbwrで用います。

正が赤、負が青、0付近が白とわかりやすいからです。

しかし、0を中心にした際、偏った分布をしていた場合、0が白で配色されなくなります。

この図の場合、0~40の値が青くなり、負の値と捉えられ、見づらい図になっています…

そうした場合、カラーバーの中心を0で指定してあげることで、0が白で配色されます。

方法

matplotlib.colors.TwoSlopeNorm

カラーバーの中心の値を指定したい場合、matplotlib.colors.TwoSlopeNormを用います。

このモジュールのパラメータに値を入れることで、その値がそのカラーバーの中心になります。

下の例では、中心に0を指定しています。

具体例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors

array = np.arange(-10,90).reshape(10,10)

fig,ax=plt.subplots(figsize=(10,7))
im=plt.pcolor(array,cmap='bwr',norm=colors.TwoSlopeNorm(0)) 
plt.colorbar(im,extend='both',orientation='vertical')
plt.show()

パラメータであるvmin、vmaxを同じ大きさで指定する

  • vminとは、表示するカラーバーの最小値
  • vmaxとは、表示するカラーバーの最大値

この2つのパラメータを同じ大きさで指定してあげることで強制的にカラーバーの中心を0にし、配色が白になります。

具体例:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors

array = np.arange(-10,90).reshape(10,10)

fig,ax=plt.subplots(figsize=(10,7))
im=plt.pcolor(array,cmap='bwr',vmin=-100,vmax=100) 
plt.colorbar(im,extend='both',orientation='vertical')
plt.show()

しかし、正負の値に偏りがある場合、上の図のように存在しない値にも配色されるので、負の値の色が分かりにくくなっています。

なので、vminとvmaxの値を工夫するか、カラーバーの色合いを変える必要が出てきます。

そのためのmatplotlib.colors.TwoSlopeNormモジュールだと思うので、この方法はあまりお勧めしません。

まとめ

matplotlib.colors.TwoSlopeNormでカラーバー中心の値を指定できる。