【matplotlib】 カラーバーを対数表示にする

カラーマップを描画する際、必要となるカラーバー。

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

例では、カラーマップに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()

例では、カラーマップに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