3
$\begingroup$

What are some good ways to make a heatmap understandable when printed in black ink? (without having to butcher the color version too much, as some reader might have some color printer, or read on the computer)

For example, the following heatmap isn't good as blue and red cannot be easily distinguishable when printed in black and white:

enter image description here

enter image description here


With one color:

enter image description here

$\endgroup$
4
  • $\begingroup$ But why did you need 2 colours on the 1st one? You don't have 2 categories anyhow (such as positive vs negative values) and the colours only mislead. $\endgroup$ – ttnphns May 30 '16 at 8:09
  • $\begingroup$ @ttnphns one color for the "good value", one color for the "bad value". I believe that two colors allow to distinguish more colors than just one. But I agree I could use only one color, which would be one solution. $\endgroup$ – Franck Dernoncourt May 30 '16 at 8:21
  • $\begingroup$ In your case - using colour to show intensity, continuous value - the only way out would be to add an addidional characteristic to the grayscale display. Such as texture (including effects like noise/dithering). $\endgroup$ – ttnphns May 30 '16 at 8:34
  • $\begingroup$ one color for the "good value", one color for the "bad value". You do not define the cutpoint between good and bad, so good and bad remain the polars of the continuous scale coinsiding with the plotted value scale. Therefore you are duplicating the information, which isn't right. Also, scientific graphs are mostly to display objective information only, they shouldn't display (by colour or whatever) something what itself is the interpretation of the graph. It is not nice to mix elements-to-be-interpreted with their interpretation (including assesments "good", "wow" etc.) on the same pic. $\endgroup$ – ttnphns May 30 '16 at 9:03
4
$\begingroup$

You can use a grayscale colormap that ranges from white to dark gray. If you want it to have color but still look ok when printed in grayscale, you have to make the 'brightness' of the color scale monotonically from the lowest to highest value. One way to do this would be to define the colormap in HSV colorspace, where V corresponds to 'brightness'. You could then convert to RGB if necessary. Or, working in RGB colorspace, you could use the mean value of R, G, and B as your working measure of 'brightness'.

The perceived value will depend on the transfer function of the printer/display device (which can be handled automatically by gamma correction in your print/display system), and on the transfer function of the visual system (which is part of why more complicated colorspaces are defined the way they are). If you wanted to get fancy you could use one of these colorspaces. Ideally, there'd be a linear mapping between perceived value and the value represented in the plot. But it's not strictly necessary if the goal is just to look reasonable when printed in grayscale.

If you're talking about truly black and white (not grayscale), one option would be to use something like dithering.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.