How can I create a linear colormap, where the saturation goes from 0 to 1 for a single custom RGB color?
I need a map like the 'Blues' or 'Greens' (see here: http://www.scipy.org/Cookbook/Matplotlib/Show_colormaps) but for a custom color.
I think it may be achievable with LinearSegmentedColormap, but I don't understand how I need to set the parameters.
See the example below:
from matplotlib.colors import LinearSegmentedColormap
import matplotlib.pyplot as plt
import numpy as np
def CustomCmap(from_rgb,to_rgb):
# from color r,g,b
r1,g1,b1 = from_rgb
# to color r,g,b
r2,g2,b2 = to_rgb
cdict = {'red': ((0, r1, r1),
(1, r2, r2)),
'green': ((0, g1, g1),
(1, g2, g2)),
'blue': ((0, b1, b1),
(1, b2, b2))}
cmap = LinearSegmentedColormap('custom_cmap', cdict)
return cmap
fig, ax = plt.subplots(2,2, figsize=(6,6), subplot_kw={'xticks': [],'yticks': []})
fig.subplots_adjust(hspace=.1,wspace=.1)
ax = ax.ravel()
cmap1 = CustomCmap([0.00, 0.00, 0.00], [0.02, 0.75, 1.00]) # from black to +/- 5,192,255
cmap2 = CustomCmap([1.00, 1.00, 1.00], [0.02, 0.75, 1.00]) # from white to +/- 5,192,255
cmap3 = CustomCmap([1.00, 0.42, 0.04], [0.02, 0.75, 1.00]) # from +/- 255,108,10 to +/- 5,192,255
cmap4 = CustomCmap([1.00, 0.42, 0.04], [0.50, 0.50, 0.50]) # from +/- 255,108,10 to grey (128)
ax[0].imshow(np.random.rand(30,30), interpolation='none', cmap=cmap1)
ax[1].imshow(np.random.rand(30,30), interpolation='none', cmap=cmap2)
ax[2].imshow(np.random.rand(30,30), interpolation='none', cmap=cmap3)
ax[3].imshow(np.random.rand(30,30), interpolation='none', cmap=cmap4)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With