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

Question:

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?

Asked By: otmezger

||

Answers:

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?

Answered By: tacaswell
Categories: questions Tags: , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.