I need large set (20 and more) of contrasted and easily visually-distinguishable colors for coloring different datasets on a scientific plot (the set of colors should not include white or black, and colors should be as bright as possible).

The plot is generated programmatically and intended to be included in a presentation which will be displayed using a projector.

Are there any ready-made sets of colors for such a task (I need colors as a set of RGB values)?

Or maybe there is some algorithm which generates such a set of colors programmatically (I use Wolfram Mathematica for plot generation)?

P.S. The plot itself may look, for example, similar to this one:


up vote 61 down vote accepted

Thanks to great work

P. Green-Armytage (2010): A Colour Alphabet and the Limits of Colour Coding. // Colour: Design & Creativity (5) (2010): 10, 1-23

(and to user ohadsc who referenced it!) now I know at least 3 ready-made color sets of maximum contrast containing not less than 20 colors (but I still have explicit RBG values only for one of them):

1) The set of 22 colours of maximum contrast proposed by Kenneth Kelly in the work:

K. Kelly (1965): Twenty-two colors of maximum contrast. // Color Eng., 3(6)

Specifics (citing P. Green-Armytage): "The order of colours in Kelly's list was planned so that there would be maximum contrast between colours in a set if the required number of colours were always selected in order from the top. <...> Kelly took care of the needs of people with defective color vision. The first nine colours would be maximally different for such people as well as for people with normal vision. These nine colours are also readily distinguishable by colour name."

Additional information (citing P. Green-Armytage): "The ISCC set up Project Committee 54 with the intention of bringing Kelly's work up to date. However, the committee decided that, for what they were trying to do, they could not improve on Kelly's set of colours."

2) The set of 25 colors suggested by Robert and Ellen Carter in the work:

Robert C. Carter, Ellen C. Carter (1982): High-contrast sets of colors. // Appl. Optics, 21 (1982) 2936-2939.

Specifics (citing P. Green-Armytage): "Carter and Carter make reference to Kelly's work and verify his assumption that the ease with which two colours can be discriminated depends on how far apart the colours are in colour space. From the colour spaces available at the time they chose CIE Luv* as most appropriate for their study. <...> They found that people's ability to identify colours correctly diminished rapidly when the distance between colours was less than 40 CIE Luv* units." In their work they present a set of 25 colors separated by at least 51.6 CIE Luv* units.

3) The set of 26 colors for the Colour Alphabet Project suggested by Paul Green-Armytage in the above-cited work "A Colour Alphabet and the Limits of Colour Coding." This color set is designed for use with white background. RGB triplets of this set are: {240,163,255},{0,117,220},{153,63,0},{76,0,92},{25,25,25},{0,92,49},{43,206,72},{255,204,153},{128,128,128},{148,255,181},{143,124,0},{157,204,0},{194,0,136},{0,51,128},{255,164,5},{255,168,187},{66,102,0},{255,0,16},{94,241,242},{0,153,143},{224,255,102},{116,10,255},{153,0,0},{255,255,128},{255,255,0},{255,80,5}.


4) There is another excellent article on the subject:

Zeileis, Hornik and Murrell (2009): Escaping RGBland: Selecting Colors for Statistical Graphics // Computational Statistics & Data Analysis Volume 53, Issue 9, 1 July 2009, Pages 3259-3270

This article contains nice set of 26 distinct colors on the page 11:

Zeileis, Hornik and Murrell 2009 color set

RGB triplets of this set are: {2,63,165},{125,135,185},{190,193,212},{214,188,192},{187,119,132},{142,6,59},{74,111,227},{133,149,225},{181,187,227},{230,175,185},{224,123,145},{211,63,106},{17,198,56},{141,213,147},{198,222,199},{234,211,198},{240,185,141},{239,151,8},{15,207,192},{156,222,214},{213,234,231},{243,225,235},{246,196,225},{247,156,212}.


User Tatarize suggests in his blog:

5) A set of 64 maximally dissimilar colors:

Tatarize's set of 64 maximally dissimilar colors

6) A color dictionary of 269 maximally distinct colors from all previous colors (I used this function for getting RGB triplets from the hex codes):

Tatarize's color alphabet

Here are the hex codes from linked blog post (complete listing of 269 hex codes of Tatarize's color alphabet hidden in the history of changes for readability).

7) 256 distinct colors.


Potentially useful web-applications:


8) List of 20 Simple, Distinct Colors by Sasha Trubetskoy:


"I made an easy to use list of colors that is optimized across all media; not without tiny compromises, of course, such as inexact CMYK conversions. The main issue is choosing “pure” (e.g. 100% magenta) or web-safe colors leads to gawdy, distracting and imbalanced color palettes. This is my attempt at a nice palette that works well for network or transit-style diagrams, or for categorical data."

  • 1
    This is quite useful, Alexey. Thanks! I'm wondering if you found anything for 1. continuous colour scales (gradients) 2. colour scales or colour sets that retain contrast even after greyscale conversion (a requirement in APS journals, for example). graphicdesign.stackexchange.com/questions/7960/… – Szabolcs Jun 16 '12 at 9:33
  • If anyone needs, here are the hex-codes of the colors in the same order as they are on the picture **** private string[,] graphColors = { {"#023FA5","#7D87B9","#BEC1D4","#D6BCC0","#BB7784","#FFFFFF"}, {"#4A6FE3","#8595E1","#B5BBE3","#E6AFB9","#E07B91","#D33F6A"}, {"#11C638","#8DD593","#C6DEC7","#EAD3C6","#F0B98D","#EF9708"}, {"#0FCFC0","#9CDED6","#D5EAE7","#F3E1EB","#F6C4E1","#F79CD4"}, }; – alex440 Apr 29 '14 at 16:22
  • Does anyone have the hex code for the colors in Update #1? – redshift Feb 15 '16 at 13:07
  • 1
    @redshift They are: "#023fa5", "#7d87b9", "#bec1d4", "#d6bcc0", "#bb7784", "#8e063b", "#4a6fe3", "#8595e1", "#b5bbe3", "#e6afb9", "#e07b91", "#d33f6a", "#11c638", "#8dd593", "#c6dec7", "#ead3c6", "#f0b98d", "#ef9708", "#0fcfc0", "#9cded6", "#d5eae7", "#f3e1eb", "#f6c4e1", "#f79cd4". – Alexey Popkov Feb 23 '16 at 11:26
  • to create comma separated hex strings from those, use this python oneliner: print("'" + "', '". ...: join('#'+''.join(f'{int(c):02x}' for c in col.split(',')) for col in colors.strip('{}').split('},{')) + "'"). – flying sheep Mar 10 '17 at 10:24

The combination of "bright", "easily distinguishable" and "20 and more" is tricky. Reminds me of "Our work is fast, cheap and high-quality. Pick any two." I think you could drop "bright" out of the mix and just say "contrasted". That makes the brief simpler to achieve, and I think will get you where you want to be.

I don't know of such a set off-hand, but here's how I would go about it using Photoshop:

  • Create a blank document in the color mode (RGB or CMYK) you want to use. RGB is correct for all desktop printers and for on-screen or projection viewing. Use CMYK only if you need actual CMYK values.

  • Pick 5 base colors evenly spread around the color wheel. In the Hue setting, that means 0, 60, 120, 180, 240 and 300. These would be your starting points. (Alternatively, replace the default swatches with the Windows or Mac set available in the Swatches panel flyout menu, and use the 7th-last to 2nd-last.)

  • For each Hue, select 5 or 6 brightness and saturation levels that give you easily-distinguished final colors.

  • As you find each one, add it to your swatches.

If you're setting these up to be generated programatically, just take whichever of the values fit the color model you'll be dealing with. If you need to use Illustrator or Flash for the dots, add these steps:

  • Delete all the other swatches (Alt/Opt-click to remove) so all you have left are the ones you want.

  • Save the swatches using "Save Swatches for Exchange..." in the Swatches flyout. This saves a .ASE file which can be loaded into Illustrator, InDesign or any of the other Adobe apps.

I hope that helps.

[Addition after question expanded]

Base colors in hex are: 0xff0000 (pure red), 0xffff00 (yellow), 0x00ff00 (green), 0x00ffff (cyan), 0x0000ff (blue) and 0xff00ff (magenta). Doing some experimenting, I found pure yellow too close too white to be entirely useful for your purposes, and blue required a different starting point because it is visually dark. From each base color, you can get away with 4 shades. Since you can also use greys, that permits a 7x4 matrix of what I would consider quite usable colors, given your constraints (and presumed lack of access to Photoshop or a similar application). Grab a calculator and derive the decimal values if you need them! :-)

  • For all but yellow, blue and gray, your starting points are the pure colors. Reduce the hex values from ff to b0, 87 and 55 for your four shades.

  • For blue, the "bright" is b0b0ff, and the shades are 8484ff, 4949ff and 0000ff.

  • For yellow: e4e400, baba00, 878700 and 545400 will work, and for the gray values make the low order bytes the same as the high and middle in each case.

My quick-and-dirty chart of these (minus the greys) looks like this:

color grid

  • I have corrected my question: the colors should be contrasted (and as far as possible bright). The plot is generated programmatically and I need the colors as a set of RGB values. Thank you. – Alexey Popkov Sep 13 '11 at 3:36
  • See the expanded answer. I think that will get you where you need to be. – Alan Gilbertson Sep 13 '11 at 7:55
  • 2
    Re-read paragraph 2 of my answer. You asked for RGB values, not Munsell; you got RGB. These will work for your purposes, there is no need to use all of them, and I gave you the details to that you have the flexibility to modify them. Site contributors are not here to do your work for you (see the FAQ). – Alan Gilbertson Sep 13 '11 at 17:15
  • 2
    A correction to the values in @neu242's comment (where cyan and blue "merge" and which contains white). I think Alan's colours are: #ff0000 #b00000 #870000 #550000 #e4e400 #baba00 #878700 #545400 #00ff00 #00b000 #008700 #005500 #00ffff #00b0b0 #008787 #005555 #b0b0ff #8484ff #4949ff #0000ff #ff00ff #b000b0 #870087 #550055 #e4e4e4 #bababa #878787 #545454 but I wouldn't necessarily use them in that order... – MikeLimaOscar Jan 2 '14 at 15:06
  • 2
    ... here they are again as RGB triples but "transposed": {255,0,0}, {228,228,0}, {0,255,0}, {0,255,255}, {176,176,255}, {255,0,255}, {228,228,228}, {176,0,0}, {186,186,0}, {0,176,0}, {0,176,176}, {132,132,255}, {176,0,176}, {186,186,186}, {135,0,0}, {135,135,0}, {0,135,0}, {0,135,135}, {73,73,255}, {135,0,135}, {135,135,135}, {85,0,0}, {84,84,0}, {0,85,0}, {0,85,85}, {0,0,255}, {85,0,85}, {84,84,84}. – MikeLimaOscar Jan 2 '14 at 15:09

A nice approach is the Solarized color scheme by Ethan Schoonover.

From the descr.:

"Solarized is a sixteen color palette (eight monotones, eight accent colors) designed for use with terminal and gui applications."

I think it's not only a nice color scheme, but also extensible and has a nice theory behind it.

There's a fundamental flaw and that's attempting to plot 20 different things in one visual. That's a lot of visual clutter and adding 20 colors is only going to add to that clutter.

I'd consider rethinking the overall visual if you can. Perhaps segment it into 4 visuals of 5 colors each, mix and match overlays, etc.

Tufte is the go-to resource for learning more about plotting data in ways that best communicate the objective:


You can try this color picker. It was designed for maps but we use it for charts and graphs as well. Good luck!


Max 12 colours though. sorry. : )

Your Answer


By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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