Print

Print


On Tue, Dec 20, 2011 at 10:57 AM, Nate Hill <[log in to unmask]> wrote:

> This way, when I loop through and hit my CSS {background-color:rgb(255,
> **data**, 255);} each piece of data will generate a different color and
> I'll have the maximum spread in proportionally correct colors from 0-255.

I'd need to see exactly what you're doing, but I think this method may
leave you somewhat unsatisfied. The magenta-white color scale isn't
gonna be lovely, and there's no sense of absolute scale to this
technique. Maybe that's what you want, but... probably not. You might
want to say "Hey, values are supposed to be from 0 to 450; anything
outside this range should be clamped. Or highlighted. Or something."

Anyhow, for "perceptually good" color scales, this is a great resource:

http://colorbrewer2.org/

... and if you want a good way to generate color ramps in javascript,
the most excellent d3.js library will help you out:

http://mbostock.github.com/d3/

In this case, to create a scale like this, you'd do:

var data = [6, 457, 97, 200, 122];
var color_scale = d3.scale.linear().domain([d3.min(data),
d3.max(data)]).range(['#FF00FF', '#FFFFFF']); // we're expecting data
from 6..457, and will output magenta to white...

console.log(color_scale(6)); // rgb(255,0,255);
console.log(color_scale(457)) // rgb(255,255,255);
console.log(color_scale(500)) // rgb(255,279,255); //oops!
color_scale.clamp(true);
console.log(color_scale(500)) // rgb(255,255,255); //better!

-n