web-dev-qa-db-ja.com

matplotlib imshow-デフォルトの色正規化

imshowを使用しているときに、カラーマップに一貫して問題があります。一部の色は黒に見えるようです。私はついに、imshowがデフォルトで、私が与えた浮動小数点値の行列を正規化するように見えることに気付きました。

[[0,0.25],[0.5,0.75]]などの配列は、それらの絶対値に対応するマップの適切な色を表示するはずですが、0.75は1として解釈されます。極端な場合、0.2のN x N配列たとえば、カラーマップで0.2に対応すると予想されるもの(おそらく20%グレー)ではなく、1つの大きな黒い正方形を生成します。

この振る舞いを防ぐ方法はありますか?カスタムカラーマップに多くの不連続性がある場合、特に目障りです。スケールのわずかな変更により、すべての色が完全に変更される可能性があります。

31
oLas

vmin=0, vmax=1を指定するだけです。

デフォルトでは、imshowはデータをその最小値と最大値に正規化します。これは、vmin引数とvmax引数、またはnorm引数(非線形スケーリングが必要な場合)で制御できます。

簡単な例として:

import matplotlib.pyplot as plt

data = [[0, 0.25], [0.5, 0.75]]

fig, ax = plt.subplots()
im = ax.imshow(data, cmap=plt.get_cmap('hot'), interpolation='nearest',
               vmin=0, vmax=1)
fig.colorbar(im)
plt.show()

enter image description here

52
Joe Kington