23

One referee comment says that "Not sure the colormap shows up well in black and white". Two figures in my manuscript are shown below. Do I have to change the colormap settings? If I do, how do I ensure that the colormap shows well in black and white?

enter image description here enter image description here

These figures are drawn from https://arxiv.org/abs/2202.11964

13
  • 20
    To be honest, I am not even sure that it does show well in color. But in any case, the only real proof of the pudding is in the eating. So what I would always suggest is to print it on the oldest, least well maintained b/w-printer you can find. Or in absence of a bad printer, try to print it and then photocopy it once or twice...
    – mlk
    May 5 at 8:19
  • 21
    Go to colorbrewer2.org and select a scale that is photocopy safe.
    – Roland
    May 5 at 9:00
  • 1
    I have seen a few publications on this issue over the years, not particularly on colormaps though. For instance, this might help you: nature.com/articles/nmeth.1618 May 5 at 9:39
  • 5
    See also matplotlib.org/3.5.0/tutorials/colors/colormaps.html and the section within about grayscale conversion. May 5 at 9:45
  • 3
    With a limited number of discrete values being shown, you may consider a non-continuous scale to reduce the burden of mapping colors, as well as using different line styles (dashed, dotted, etc.) in addition to color (although that also doesn't do well when there are many lines or overlapping lines like the bottom plot). May 5 at 18:00

8 Answers 8

32

Another option to printing in black and white would be testing your figure using a website such as Coblis — Color Blindness Simulator.

This way you can upload your figure and see what it would look like in a monochromatic view to see if someone who is colourblind can understand it. If you need to use a different colourblind friendly palette that works well in black and white you can check out a few of these links:

Hope this helps!

3
  • 1
    +1 Saw the title and my first thought was Coblis as well; I was showing it to someone just yesterday. A third link I can recommend is Viridis, which I see showing up more and more frequently across a variety of journals
    – anjama
    May 5 at 17:13
  • 2
    One potential problem with this is that different methods of converting to black-and-white yield different results, so a figure might look fine when viewed using these websites, but then look worse when the journal actually converts it for printing. May 5 at 17:19
  • 2
    @TannerSwett comparisons between widely-used computational methods of conversion may not maintain perceived linearity, and may suffer at the extremes, but if a colour map is monotonic in one as it generally should be you can trust it to be monotonic in another. There are other issues that can creep in, e.g. you choose 100% blue to contrast to yellow, and different processes to reach greyscale can put them closer together than you might expect, losing contrast
    – Chris H
    May 6 at 12:49
11

I believe these colormaps are already hard to interpret, even with full color perception. Ranges of values are usually represented by colors going from "cold" (blue or green) to "hot" (yellow or red). In the plots you presented, I would intuitively expect that yellow and green curves represent values which are close to each other, but in fact they are opposite!

With black and white printing, you are essentially limited to shades of grey. You usually don't want to use very light shades as your curves will be almost invisible, so the usable range is somewhere between (25% .. 50%) light grey and (near 100%) black.

There are colormaps with monotonous brightness, which map well to black and white. One example is colors going from dark blue via green to yellow. Another intuitive option is to go from black via red to yellow, which is sometimes known as "heat colors":

enter image description here

1
  • 1
    I tend to use "heat" as well, because I know it goes to B&W well. The opposite "cold" or "ice" (black-blue-cyan) also works, and can be reverse and used in combination with heat to map values -1..0..1 with 0 as black, if you can work around losing the sign
    – Chris H
    May 6 at 12:44
7

If you do not have access to a printer, you can select "Adobe PDF" as your "printer" and then in the printer dialog box change the settings to grayscale or black and white, then save a black and white pdf version of the document and see how it looks.

0
6

For scientific visualistion one can use perceptually uniform scientific colormaps

  • color gradients for partial human colour-vision deficiency ( CVD)
  • gray gradients for total color blindness ( it is very rare but exist)

Matplotlib has Perceptually Uniform Sequential color maps, so user has only to choose such map.

4

Charlotte Findlay's answer (Coblis) is my usual goto tool, but for those that are interested, GIMP has an easy-to-use desaturate tool that gets the job done as well. For those wanting to go a step further and test their image for different types of colorblindness, GIMP also has some display filters to check that.

4

I like the cubehelix colour palette

which was designed to degrade gracefully to greyscale without losing information. It was created to vary smoothly in both lightness and hue, so that it looks okay in both colour and greyscale.

The cubehelix has parameters that you can tune to change the exact way it transitions between colours.

In Python you can implement this with: cmap='cubehelix'. Here is an example:

enter image description here

2

I use a tool called ColorOracle. It’s a color blindness simulator that, in addition to grey scale, can also simulate the three most common forms of color blindness. It’s great for checking for accessibility when making presentations or designing figures for publications. Very easy to use, too. I highly recommend it.

And the best part — it’s available on Windows, Mac, and Linux!

1

"how do I ensure that the colormap shows well in black and white?"

I am not sure that you can have a reliable transferrable method. You can fix this problem for these specific graphs.

Focus on the story the data is showing (here it looks like there are lines that drift lower towards the bottom right). Emphasize that location, de-emphasize the rest of the panel.

Understand you have a fundamentally 3D (vertical, horizontal, color) plot with several line traces.

Here are options that i can see.

#1. recreate the color map from a visible light/medium grey to black. the lines on the plot that appear important to me are on the 'upper' end of the color spectrum, so that should be the blackest end of the spectrum. that will ensure emphasis on the 'deviant' track lines (both shown lower on the vertical axis). The overlapping lines will be assisted by reducing opacity (i.e. 'alpha'). You will need to tune both the color spectrum and the opacity to fit the needs. All color mappings should be as consistent as possible between different graphs. This option would also require replacing the broken 'global' line with 'x' or 'o' or some other distinguishing marker shape.

#1 continued. This grey/black option might further be assisted by accentuating the log nature of the color spectrum. Currently, it looks like log base 10, you could push that log base in either direction and see how that accentuates the point in the plots you want to emphasize. You will need a bit of expertise to do that effectively. I personally would not worry about the numerical nature of the plot as much as i would the narrative surrounding it, but its not my paper.

OR

#2 abandon color as the representation of the 3rd dimension. Replace color with height using a 3D surface plot with line tracks. This might or might not work well, depending on your comfort level, as it is fundamentally a visual illusion of representing a 3D plot on a 2D piece of virtual paper. This is a viable option here specifically because the highest 'peak' will not meaningfully obscure lower peaks when oriented correctly, meaning the graph could remain static (i.e. simple printed static image).

OR

#2 continued. keep color and use the 3D surface height in combination. The two representations indicate the same data, but its redundant.

OR

#3 leave the color plot as is and add an interactive element... either on this visualization or an additional visualization. For example, Plotly creates .html with hover capabilities. This way, the user can mouse hover over individual points and get a full text breakdown of whatever string you want.

OR

#4 just say no and leave it as is. being perfectly honest, these are not the most beautiful graphs, but its not an art contest, the data is effectively represented in its current form, assuming the emphasis is on the lower right deviant tracks. if the emphasis is elsewhere, you need more than a color reimagining.

either/both #1 and #2 are likely your best bets, but both would require some amount of skill, design sense, and expertise to render effectively.

Happy plotting! gl

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .