92

matplotlib で imshow を使用してデータをヒートマップとしてプロットしようとしていますが、一部の値が NaN です。カラーマップにない特別な色として NaN をレンダリングしたいと思います。

例:

import numpy as np
import matplotlib.pyplot as plt
f = plt.figure()
ax = f.add_subplot(111)
a = np.arange(25).reshape((5,5)).astype(float)
a[3,:] = np.nan
ax.imshow(a, interpolation='nearest')
f.canvas.draw()

結果として得られる画像は、予想外にすべて青色です (jet カラーマップの最も低い色)。ただし、次のようにプロットすると:

ax.imshow(a, interpolation='nearest', vmin=0, vmax=24)

-- より良い結果が得られますが、NaN 値は vmin と同じ色で描画されます... NaN を特別な色 (例: 灰色または透明) で描画するように設定できる優雅な方法はありますか?

4

2 に答える 2

90

うーん、マスクされた配列を使用してこれを行うことができるようです:

masked_array = np.ma.array (a, mask=np.isnan(a))
cmap = matplotlib.cm.jet
cmap.set_bad('white',1.)
ax.imshow(masked_array, interpolation='nearest', cmap=cmap)

これで十分ですが、私はまだ提案を受け付けています。:]

于 2010-04-05T14:30:10.957 に答える