The endless quest of defining a colormap that looks good when printed in grayscale has ended.
This library allows the definition of rgb colors so that they can be picked for maximum contrast between their Hue and the equivalent grayscale intensity. The library uses the HSV convention, and calculates the S and V values for other palettes required to reflect the grayscale intensity of the red color. In this way, you can input colors by specifying color type (Hue) and grayscale intensity (Int), and you can be assured that when multiple colors are printed in grayscale, the resulting intensity is matched. The library includes the matrix of S and V conversions "HSVBWColormap.mat" and the function HInt2RGB that creates RGB values.
Example on how to use the file, to define a 6 colors colormap. Note that, with the addition of white and black, this allows use of 8 colors when needed.
rgb(1,:)=HInt2RGB(1,100); % red, darkest
rgb(2,:)=HInt2RGB(7,82); % cyan, less dark
rgb(3,:)=HInt2RGB(3,64); % green, less dark
rgb(4,:)=HInt2RGB(9,46); % magenta, less dark
rgb(5,:)=HInt2RGB(2,28); % orange, less dark
rgb(6,:)=HInt2RGB(7,10); % blue cyan, lightest
X=[0 1 1 0];
Y=[0 0 1 1];
Note that the resulting darkness is decreasing, and the colors change maximizing contrast (change in Hue between adjacent patches is 120-180 deg).
Fab (2020). Colormap that looks good when printed grayscale (https://www.mathworks.com/matlabcentral/fileexchange/53499-colormap-that-looks-good-when-printed-grayscale), MATLAB Central File Exchange. Retrieved .
MATLAB users might also be interested in my FEX submission |cubehelix|, which offers beautiful colormaps that print properly in grayscale (retaining the sequence information). My submssions is also a drop-in replacement for the standard MATLAB colormap functions, so you can use it straight away: