Clear colormap for figures when printed?

UPDATE:2

Use perceptually uniform color-maps when possible. I suggest to use this nice toolbox in Matlab (colorBrewer) or to use the new perceptually uniform colormaps from python matplotlib (also available in Matlab).

Matplotlib's new colormaps look like this:

enter image description here

UPDATE:

If you use Matlab, and you have access to Matlab R2014b or newer, use the default colormap: parula. They designed it so it is a good colormap, not only for b&w printing but also for correct data visualization (i.e. it doesn't add features due to the choice of colour, as jet does)

Explanation: http://blogs.mathworks.com/steve/2014/10/20/a-new-colormap-for-matlab-part-2-troubles-with-rainbows/

Parula looks like this:

enter image description here enter image description here

Original answer

Use the "hot" colormap. If you use Matlab this is one of the built colormaps. I believe than in numpy and other languages you also have this colormap included.

You can see in the image below, how the commonly used "jet" , the "hot" and a "gray" colormap are seen in grayscale. It can be seen that the "hot" colormap is quite good both in colour and grayscale.

enter image description here


Thanks to those who pointed out that Parula is the new default Matlab colormap and solves this problem nicely. I will give a more general explanation of why this problem arises. A very good series of articles about colormaps can be found here.

I'll consider the colormap as a series of colours in Lab space, for reasons which will become clear shortly. In Lab space L represents the colour's lightness and a and b give the colour. Therefore we can view converting to greyscale as taking only the L component (with a=b=0). Therefore to convert well into greyscale our colormap should be monotonic in L and ideally approximately linear.

The 3D color inspector plugin for imageJ provides a handy tool to visualise the colormaps in Lab space. Looking at the Jet colormap (the old Matlab default) in this way the problem becomes clear. Jet is not monotonic in lightness and approaches maximum lightness somewhere in the green/yellow range. Therefore, when converted to greyscale the two ends of the map appear dark while the centre is light coloured.

Compare this to the parula colormap, which is monotonic in lightness. If you do further analysis you can also show that it is reasonably linear in lightness. The conversion to greyscale will therefore be pretty good.

There are many other colormaps which also have this property of monotonic lightness, in particular most monotone maps. However, it is also advantageous to maximise the distance between colours in Lab space to increase clarity when viewing in colour. Monochrome maps are relatively weak in this respect as they have a much more limited range of ab values than rainbow type maps.

enter image description here


I think the default colour map is not that good for most cases, since having essentially four different colours can make it look different than what it is. A very clear example of what I say (and a bunch of rants why one should not use MATLAB).

enter image description here

See the yellow stripe? It is essentially an artefact of jet, and not a property of the data (more on the post).

For a better option, I would suggest Color Brewer, that can suggest you different colour schemes safe for black and white, colourblind friendly, etc.