Advertisement
Guest User

Protovis-like Color Scale for Python

a guest
Feb 18th, 2012
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. from colorsys import *
  2. import math
  3.  
  4. simple_colors = {
  5.         "aliceblue":"f0f8ff",
  6.         "antiquewhite":"faebd7",
  7.         "aqua":"00ffff",
  8.         "aquamarine":"7fffd4",
  9.         "azure":"f0ffff",
  10.         "beige":"f5f5dc",
  11.         "bisque":"ffe4c4",
  12.         "black":"000000",
  13.         "blanchedalmond":"ffebcd",
  14.         "blue":"0000ff",
  15.         "blueviolet":"8a2be2",
  16.         "brown":"a52a2a",
  17.         "burlywood":"deb887",
  18.         "cadetblue":"5f9ea0",
  19.         "chartreuse":"7fff00",
  20.         "chocolate":"d2691e",
  21.         "coral":"ff7f50",
  22.         "cornflowerblue":"6495ed",
  23.         "cornsilk":"fff8dc",
  24.         "crimson":"dc143c",
  25.         "cyan":"00ffff",
  26.         "darkblue":"00008b",
  27.         "darkcyan":"008b8b",
  28.         "darkgoldenrod":"b8860b",
  29.         "darkgray":"a9a9a9",
  30.         "darkgreen":"006400",
  31.         "darkgrey":"a9a9a9",
  32.         "darkkhaki":"bdb76b",
  33.         "darkmagenta":"8b008b",
  34.         "darkolivegreen":"556b2f",
  35.         "darkorange":"ff8c00",
  36.         "darkorchid":"9932cc",
  37.         "darkred":"8b0000",
  38.         "darksalmon":"e9967a",
  39.         "darkseagreen":"8fbc8f",
  40.         "darkslateblue":"483d8b",
  41.         "darkslategray":"2f4f4f",
  42.         "darkslategrey":"2f4f4f",
  43.         "darkturquoise":"00ced1",
  44.         "darkviolet":"9400d3",
  45.         "deeppink":"ff1493",
  46.         "deepskyblue":"00bfff",
  47.         "dimgray":"696969",
  48.         "dimgrey":"696969",
  49.         "dodgerblue":"1e90ff",
  50.         "firebrick":"b22222",
  51.         "floralwhite":"fffaf0",
  52.         "forestgreen":"228b22",
  53.         "fuchsia":"ff00ff",
  54.         "gainsboro":"dcdcdc",
  55.         "ghostwhite":"f8f8ff",
  56.         "gold":"ffd700",
  57.         "goldenrod":"daa520",
  58.         "gray":"808080",
  59.         "green":"008000",
  60.         "greenyellow":"adff2f",
  61.         "grey":"808080",
  62.         "honeydew":"f0fff0",
  63.         "hotpink":"ff69b4",
  64.         "indianred":"cd5c5c",
  65.         "indigo":"4b0082",
  66.         "ivory":"fffff0",
  67.         "khaki":"f0e68c",
  68.         "lavender":"e6e6fa",
  69.         "lavenderblush":"fff0f5",
  70.         "lawngreen":"7cfc00",
  71.         "lemonchiffon":"fffacd",
  72.         "lightblue":"add8e6",
  73.         "lightcoral":"f08080",
  74.         "lightcyan":"e0ffff",
  75.         "lightgoldenrodyellow":"fafad2",
  76.         "lightgray":"d3d3d3",
  77.         "lightgreen":"90ee90",
  78.         "lightgrey":"d3d3d3",
  79.         "lightpink":"ffb6c1",
  80.         "lightsalmon":"ffa07a",
  81.         "lightseagreen":"20b2aa",
  82.         "lightskyblue":"87cefa",
  83.         "lightslategray":"778899",
  84.         "lightslategrey":"778899",
  85.         "lightsteelblue":"b0c4de",
  86.         "lightyellow":"ffffe0",
  87.         "lime":"00ff00",
  88.         "limegreen":"32cd32",
  89.         "linen":"faf0e6",
  90.         "magenta":"ff00ff",
  91.         "maroon":"800000",
  92.         "mediumaquamarine":"66cdaa",
  93.         "mediumblue":"0000cd",
  94.         "mediumorchid":"ba55d3",
  95.         "mediumpurple":"9370db",
  96.         "mediumseagreen":"3cb371",
  97.         "mediumslateblue":"7b68ee",
  98.         "mediumspringgreen":"00fa9a",
  99.         "mediumturquoise":"48d1cc",
  100.         "mediumvioletred":"c71585",
  101.         "midnightblue":"191970",
  102.         "mintcream":"f5fffa",
  103.         "mistyrose":"ffe4e1",
  104.         "moccasin":"ffe4b5",
  105.         "navajowhite":"ffdead",
  106.         "navy":"000080",
  107.         "oldlace":"fdf5e6",
  108.         "olive":"808000",
  109.         "olivedrab":"6b8e23",
  110.         "orange":"ffa500",
  111.         "orangered":"ff4500",
  112.         "orchid":"da70d6",
  113.         "palegoldenrod":"eee8aa",
  114.         "palegreen":"98fb98",
  115.         "paleturquoise":"afeeee",
  116.         "palevioletred":"db7093",
  117.         "papayawhip":"ffefd5",
  118.         "peachpuff":"ffdab9",
  119.         "peru":"cd853f",
  120.         "pink":"ffc0cb",
  121.         "plum":"dda0dd",
  122.         "powderblue":"b0e0e6",
  123.         "purple":"800080",
  124.         "red":"ff0000",
  125.         "rosybrown":"bc8f8f",
  126.         "royalblue":"4169e1",
  127.         "saddlebrown":"8b4513",
  128.         "salmon":"fa8072",
  129.         "sandybrown":"f4a460",
  130.         "seagreen":"2e8b57",
  131.         "seashell":"fff5ee",
  132.         "sienna":"a0522d",
  133.         "silver":"c0c0c0",
  134.         "skyblue":"87ceeb",
  135.         "slateblue":"6a5acd",
  136.         "slategray":"708090",
  137.         "slategrey":"708090",
  138.         "snow":"fffafa",
  139.         "springgreen":"00ff7f",
  140.         "steelblue":"4682b4",
  141.         "tan":"d2b48c",
  142.         "teal":"008080",
  143.         "thistle":"d8bfd8",
  144.         "tomato":"ff6347",
  145.         "turquoise":"40e0d0",
  146.         "violet":"ee82ee",
  147.         "wheat":"f5deb3",
  148.         "white":"ffffff",
  149.         "whitesmoke":"f5f5f5",
  150.         "yellow":"ffff00",
  151.         "yellowgreen":"9acd32"
  152.     }
  153.  
  154. class ColorScale:
  155.     def __init__(self, min, max):
  156.         self.min = float(min)
  157.         self.max = float(max)
  158.    
  159.     def range(self, color1, color2):
  160.         def HSV(color):
  161.             color_hex = simple_colors[color]
  162.             colorlist = [float(int(color_hex[i:i+2], 16))/255. \
  163.                 for i in range(0, len(color_hex), 2)]
  164.             return rgb_to_hsv(*colorlist)
  165.         def evaluate(value):
  166.             scale = (float(value) - self.min)/(self.max - self.min)
  167.             c1 = HSV(color1)
  168.             c2 = HSV(color2)
  169.             if c2[0] > c1[0]:
  170.                 if (c2[0] - c1[0]) > 0.5:
  171.                     h = c1[0] - scale*(1.-c2[0]+c1[0])
  172.                     if h < 0.0:
  173.                         h += 1.0
  174.                 else:
  175.                     h = c1[0] + scale*(c2[0]-c1[0])
  176.             else:
  177.                 if (c1[0] - c2[0]) > 0.5:
  178.                     h = c1[0] + scale*(1.-c1[0]+c2[0])
  179.                     if h > 1.0:
  180.                         h -= 1.0
  181.                 else:
  182.                     h = c1[0] - scale*(c1[0]-c2[0])
  183.             s = c1[1]+(c2[1]-c1[1])*scale
  184.             v = c1[2]+(c2[2]-c1[2])*scale
  185.             return tuple(map(lambda x: 255.*x, hsv_to_rgb(h, s, v)))
  186.         return lambda y: '%02x%02x%02x' % evaluate(y)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement