カラーマップを描画する際、必要となるカラーバー。
Pythonのmatplotlibで、カラーバーを対数表示にする方法を紹介します。
LogNorm
カラーバーを対数表示にしたい場合、matplotlib.colors.LogNormを用いることで解決します。
主に用いるパラメータとして、vmin、vmaxがあります。
- vmaxは、表示するカラーバーの最大値
- vminは、表示するカラーバーの最小値
具体例:
import random
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
array = np.random.uniform(1e5,1e10,(100,100))
fig,ax=plt.subplots(figsize=(10,7))
im=plt.pcolor(array,cmap='jet',norm=colors.LogNorm(vmin=1e5,vmax=1e10))
plt.colorbar(im,extend='both',orientation='vertical')
plt.show()
![](https://enjoy-pglife.com/wp-content/uploads/Articles/2022/06/1.png)
例では、カラーマップにpcolor関数を用いていますが、他の関数でも使用可能です。
ただし、vminとvmaxの差が10⁸以上になると、対数表示になりません。
また、vminやvmaxに負の値を入れると下記のように怒られます。
ValueError: minvalue must be positive
https://matplotlib.org/stable/api/_as_gen/matplotlib.colors.LogNorm.html
SymLogNorm
LogNormでは、正の値のみカラーバーを対数表示にできました。
では、正負の値で、対数表示したい場合には、matplotlib.colors.SymLogNormを用いることで解決します。
主に用いるパラメータとして、vmin、vmax、linthreshがあります。
- vmaxは、カラーバーの最大値
- vminは、カラーバーの最小値
- linthreshは、0近辺での対数表示させる値の最小値
具体例:
import random
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.colors as colors
array = np.random.uniform(-1e5,1e5,(100,100))
fig,ax=plt.subplots(figsize=(10,7))
im=plt.pcolor(array,cmap='bwr',norm=colors.SymLogNorm(linthresh=1e2,vmin=-1e5,vmax=1e5))
plt.colorbar(im,extend='both',orientation='vertical')
plt.show()
![](https://enjoy-pglife.com/wp-content/uploads/Articles/2022/06/2.png)
例では、カラーマップにpcolor関数を用いていますが、他の関数でも使用可能です。
https://matplotlib.org/stable/api/_as_gen/matplotlib.colors.SymLogNorm.html
まとめ
カラーバーの対数表示
正のみ:matplotlib.colors.LogNorm
https://matplotlib.org/stable/api/_as_gen/matplotlib.colors.LogNorm.html
正負:matplotlib.colors.SymLogNorm
https://matplotlib.org/stable/api/_as_gen/matplotlib.colors.SymLogNorm.html