I have a simple image that I’m showing with imshow in matplotlib. I’d like to apply a custom colormap so that values between 0-5 are white, 5-10 are red (very simple colors), etc. I’ve tried following this tutorial:
http://assorted-experience.blogspot.com/2007/07/custom-colormaps.html with the following code:
cdict = {
'red' : ((0., 0., 0.), (0.5, 0.25, 0.25), (1., 1., 1.)),
'green': ((0., 1., 1.), (0.7, 0.0, 0.5), (1., 1., 1.)),
'blue' : ((0., 1., 1.), (0.5, 0.0, 0.0), (1., 1., 1.))
}
my_cmap = mpl.colors.LinearSegmentedColormap('my_colormap', cdict, 3)
plt.imshow(num_stars, extent=(min(x), max(x), min(y), max(y)), cmap=my_cmap)
plt.show()
But this ends up showing strange colors, and I only need 3-4 colors that I want to define. How do I do this?
You can use a
ListedColormapto specify the white and red as the only colors in the color map, and the bounds determine where the transition is from one color to the next:The resulting figure has only two colors:
I proposed essentially the same thing for a somewhat different question: 2D grid data visualization in Python
The solution is inspired by a matplotlib example. The example explains that the
boundsmust be one more than the number of colors used.The
BoundaryNormis a normalization that maps a series of values to integers, which are then used to assign the corresponding colors.cmap.N, in the example above, just defines the number of colors.