<s> from random import shuffle <EOL> import math <EOL> def _convert_color_format ( col , alpha ) : <EOL> return [ int ( c * <NUM_LIT:255> ) for c in col [ : <NUM_LIT:3> ] ] + [ alpha ] <EOL> class ColorMap ( ) : <EOL> def __init__ ( self , cmap_name , alpha = <NUM_LIT:255> , levels = <NUM_LIT:10> ) : <EOL> """<STR_LIT>""" <EOL> from pylab import get_cmap <EOL> self . cmap = get_cmap ( cmap_name ) <EOL> self . alpha = alpha <EOL> self . levels = levels <EOL> self . mapping = { } <EOL> def to_color ( self , value , maxvalue , scale , minvalue = <NUM_LIT:0.0> ) : <EOL> """<STR_LIT>""" <EOL> if scale == '<STR_LIT>' : <EOL> if minvalue >= maxvalue : <EOL> raise Exception ( '<STR_LIT>' ) <EOL> else : <EOL> value = <NUM_LIT:1.> * ( value - minvalue ) / ( maxvalue - minvalue ) <EOL> elif scale == '<STR_LIT>' : <EOL> if value < <NUM_LIT:1> or maxvalue <= <NUM_LIT:1> : <EOL> raise Exception ( '<STR_LIT>' ) <EOL> else : <EOL> value = math . log ( value ) / math . log ( maxvalue ) <EOL> elif scale == '<STR_LIT>' : <EOL> if value < <NUM_LIT:0> or maxvalue <= <NUM_LIT:0> : <EOL> raise Exception ( '<STR_LIT>' ) <EOL> else : <EOL> value = math . sqrt ( value ) / math . sqrt ( maxvalue ) <EOL> else : <EOL> raise Exception ( '<STR_LIT>' ) <EOL> if value < <NUM_LIT:0> : <EOL> value = <NUM_LIT:0> <EOL> elif value > <NUM_LIT:1> : <EOL> value = <NUM_LIT:1> <EOL> value = int ( <NUM_LIT:1.> * self . levels * value ) * <NUM_LIT:1.> / ( self . levels - <NUM_LIT:1> ) <EOL> if value not in self . mapping : <EOL> self . mapping [ value ] = _convert_color_format ( self . cmap ( value ) , self . alpha ) <EOL> return self . mapping [ value ] <EOL> def get_boundaries ( self , maxvalue , scale ) : <EOL> edges = [ ] <EOL> colors = [ ] <EOL> for i in range ( self . levels + <NUM_LIT:1> ) : <EOL> z = <NUM_LIT:1.> * i / self . levels <EOL> if scale == '<STR_LIT>' : <EOL> edges . append ( maxvalue * z ) <EOL> elif scale == '<STR_LIT>' : <EOL> edges . append ( math . exp ( math . log ( maxvalue ) * z ) ) <EOL> elif scale == '<STR_LIT>' : <EOL> edges . append ( maxvalue * z ** <NUM_LIT:2> ) <EOL> else : <EOL> raise Exception ( '<STR_LIT>' ) <EOL> for e in edges [ : - <NUM_LIT:1> ] : <EOL> colors . append ( self . to_color ( e , maxvalue , scale ) ) <EOL> return edges , colors <EOL> def create_set_cmap ( values , cmap_name , alpha = <NUM_LIT:255> ) : <EOL> """<STR_LIT>""" <EOL> unique_values = list ( set ( values ) ) <EOL> shuffle ( unique_values ) <EOL> from pylab import get_cmap <EOL> cmap = get_cmap ( cmap_name ) <EOL> d = { } <EOL> for i in range ( len ( unique_values ) ) : <EOL> d [ unique_values [ i ] ] = _convert_color_format ( cmap ( <NUM_LIT:1.> * i / len ( unique_values ) ) , alpha ) <EOL> return d <EOL> def colorbrewer ( values , alpha = <NUM_LIT:255> ) : <EOL> """<STR_LIT>""" <EOL> basecolors = [ <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:255> , <NUM_LIT> , <NUM_LIT:0> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] , <EOL> [ <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT> ] , <EOL> [ <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ] <EOL> ] <EOL> unique_values = list ( set ( values ) ) <EOL> return { k : basecolors [ i % len ( basecolors ) ] + [ alpha ] for i , k in enumerate ( unique_values ) } </s>
