Question

I have a list of numeric values. I may normalize the values if needed.

I need to transform this list to a list of colors (in HSL, RGB or any other color model — I can always do conversion later).

For any given value the color must be the same every time.

The more different two given numeric values are, the more contrast corresponding values should be.

All used colors must be as contrast to each other as possible (this is a soft limitation, rough solution would do).

Note that list is rather large (thousands of numbers), so simply squeezing all numbers into a single color channel would produce too dense results.

Was it helpful?

Solution

You could consider using a 3D space-filling curve through your chosen colour space. I'll second Mark's CIELAB suggestion, wish I'd known about that last time I had to solve a similar problem.

OTHER TIPS

Whatever algorithm you finally settle on, you might try the CIELAB color space. It normalizes the differences in human color perception, so that equal numeric spacing gives equal perceptual differences.

See: How to automatically generate N "distinct" colors?

It would be best to normalize your values, and run them through the code I suggested (where hue == your value), building a map/hash. (You can use a hash-style function instead, which is probably more efficient.)

You can "randomize" lightness (or brightness, depending on your model) and saturation using some predetermined bits of your number, for example.

Why not use shades of gray? Just calculate the min/max values and use that to translate each number into a different shade from white to black.

I know it's not colors, but in my opinion it'll be easier to interpret the results. I can tell what it means when something is darker vs. lighter, but who is to say that, for example, green is a higher value than orange?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top