How to redefine a color for a specific value in a matplotlib colormap

otmezger picture otmezger · May 6, 2013 · Viewed 30.6k times · Source

I want to use the colormap rainbow in an image using imshow. It works perfectly, but I want to redefine the color for the value 0. Instead of violete, I want to use white.

I want to do this only for the value zero, all other values can stay with the default values in the colormap.

Any idea how to do this without having to edit the colormap manually?

Answer

tacaswell picture tacaswell · May 6, 2013

You can also use set_under which I think makes more semantic sense than using set_bad

my_cmap = matplotlib.cm.get_cmap('rainbow')
my_cmap.set_under('w')
imshow(np.arange(25).reshape(5, 5),
       interpolation='none',
       cmap=my_cmap,
       vmin=.001)

You can tweak the colorbar to also show the 'under' (and the symmetric 'over') color using the kwarg extend, see example and docs.

For an answer to a duplicate with more complete examples see How to create matplotlib colormap that treats one value specially?