カラーマップを描く際に必要なカラーバー。
ときに、カラーバーの中心を指定したい場合があります。
どのようなときか
正負の値が混ざったカラーマップを描画するとなると、正の値、負の値がわかりやすい配色である必要があります。
そういった場合、matplotlibでは、パラメータcmapをbwrで用います。
正が赤、負が青、0付近が白とわかりやすいからです。
しかし、0を中心にした際、偏った分布をしていた場合、0が白で配色されなくなります。
![](https://enjoy-pglife.com/wp-content/uploads/Articles/2022/06/3-1.png)
この図の場合、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()
![](https://enjoy-pglife.com/wp-content/uploads/Articles/2022/06/4-1.png)
パラメータである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()
![](https://enjoy-pglife.com/wp-content/uploads/Articles/2022/06/5-1.png)
しかし、正負の値に偏りがある場合、上の図のように存在しない値にも配色されるので、負の値の色が分かりにくくなっています。
なので、vminとvmaxの値を工夫するか、カラーバーの色合いを変える必要が出てきます。
そのためのmatplotlib.colors.TwoSlopeNormモジュールだと思うので、この方法はあまりお勧めしません。
まとめ
matplotlib.colors.TwoSlopeNormでカラーバー中心の値を指定できる。