Creating Color Scales
Credit: Alexander Pletzer
Problem
You need to represent numbers in a given range as colors on a pseudocolor scale, typically for data-visualization purposes.
Solution
Given a magnitude mag between given limits
cmin and cmax, the basic idea
is to return a color (R,G,B) tuple: light blue for cold (low
magnitude) all the way to yellow for hot (high magnitude). For
generality, each of R, G, and B can be returned as a float between
0.0 and 1.0:
import math
def floatRgb(mag, cmin, cmax):
""" Return a tuple of floats between 0 and 1 for R, G, and B. """
# Normalize to 0-1
try: x = float(mag-cmin)/(cmax-cmin)
except ZeroDivisionError: x = 0.5 # cmax == cmin
blue = min((max((4*(0.75-x), 0.)), 1.))
red = min((max((4*(x-0.25), 0.)), 1.))
green = min((max((4*math.fabs(x-0.5)-1., 0.)), 1.))
return red, green, blueDiscussion
In practical applications, R, G, and B will usually need to be integers between 0 and 255, and the color will be a tuple of three integers or a hex string representing them:
def rgb(mag, cmin, cmax):
""" Return a tuple of integers, as used in AWT/Java plots. """
red, green, blue = floatRgb(mag, cmin, cmax)
return int(red*255), int(green*255), int(blue*255)
def strRgb(mag, cmin, cmax):
""" Return a hex string, as used in Tk plots. """
return "#%02x%02x%02x" % rgb(mag, cmin, cmax)When given a magnitude mag between
cmin and cmax, these two
functions return a color tuple (red, green, blue) with each component on a 0-255 scale. The tuple can be represented as ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access