def getColor(color): ''' Convert any specification of a color to a hexadecimal color used by matplotlib. >>> graph.utilities.getColor('red') '#ff0000' >>> graph.utilities.getColor('r') '#ff0000' >>> graph.utilities.getColor('Steel Blue') '#4682b4' >>> graph.utilities.getColor('#f50') '#ff5500' >>> graph.utilities.getColor([0.5, 0.5, 0.5]) '#808080' >>> graph.utilities.getColor(0.8) '#cccccc' >>> graph.utilities.getColor([0.8]) '#cccccc' >>> graph.utilities.getColor([255, 255, 255]) '#ffffff' Invalid colors raise GraphExceptions: >>> graph.utilities.getColor('l') Traceback (most recent call last): music21.graph.utilities.GraphException: invalid color abbreviation: l >>> graph.utilities.getColor('chalkywhitebutsortofgreenish') Traceback (most recent call last): music21.graph.utilities.GraphException: invalid color name: chalkywhitebutsortofgreenish >>> graph.utilities.getColor(True) Traceback (most recent call last): music21.graph.utilities.GraphException: invalid color specification: True ''' # expand a single value to three if common.isNum(color): color = [color, color, color] if isinstance(color, str): if color[0] == '#': # assume is hex # this will expand three-value codes, and check for badly # formed codes return webcolors.normalize_hex(color) color = color.lower().replace(' ', '') # check for one character matplotlib colors if len(color) == 1: colorMap = {'b': 'blue', 'g': 'green', 'r': 'red', 'c': 'cyan', 'm': 'magenta', 'y': 'yellow', 'k': 'black', 'w': 'white'} try: color = colorMap[color] except KeyError: raise GraphException('invalid color abbreviation: %s' % color) try: return webcolors.css3_names_to_hex[color] except KeyError: # no color match raise GraphException('invalid color name: %s' % color) elif common.isListLike(color): percent = False for sub in color: if sub < 1: percent = True break if percent: if len(color) == 1: color = [color[0], color[0], color[0]] # convert to 0 100% values as strings with % symbol colorStrList = [str(x * 100) + "%" for x in color] return webcolors.rgb_percent_to_hex(colorStrList) else: # assume integers return webcolors.rgb_to_hex(tuple(color)) raise GraphException('invalid color specification: %s' % color)
def getColor(color): ''' Convert any specification of a color to a hexadecimal color used by matplotlib. >>> graph.utilities.getColor('red') '#ff0000' >>> graph.utilities.getColor('r') '#ff0000' >>> graph.utilities.getColor('Steel Blue') '#4682b4' >>> graph.utilities.getColor('#f50') '#ff5500' >>> graph.utilities.getColor([0.5, 0.5, 0.5]) '#808080' >>> graph.utilities.getColor(0.8) '#cccccc' >>> graph.utilities.getColor([0.8]) '#cccccc' >>> graph.utilities.getColor([255, 255, 255]) '#ffffff' Invalid colors raise GraphExceptions: >>> graph.utilities.getColor('l') Traceback (most recent call last): music21.graph.utilities.GraphException: invalid color abbreviation: l >>> graph.utilities.getColor('chalkywhitebutsortofgreenish') Traceback (most recent call last): music21.graph.utilities.GraphException: invalid color name: chalkywhitebutsortofgreenish >>> graph.utilities.getColor(True) Traceback (most recent call last): music21.graph.utilities.GraphException: invalid color specification: True ''' # expand a single value to three if common.isNum(color): color = [color, color, color] if isinstance(color, str): if color[0] == '#': # assume is hex # this will expand three-value codes, and check for badly # formed codes return webcolors.normalize_hex(color) color = color.lower().replace(' ', '') # check for one character matplotlib colors if len(color) == 1: colorMap = { 'b': 'blue', 'g': 'green', 'r': 'red', 'c': 'cyan', 'm': 'magenta', 'y': 'yellow', 'k': 'black', 'w': 'white' } try: color = colorMap[color] except KeyError: raise GraphException('invalid color abbreviation: %s' % color) try: return webcolors.css3_names_to_hex[color] except KeyError: # no color match raise GraphException('invalid color name: %s' % color) elif common.isListLike(color): percent = False for sub in color: if sub < 1: percent = True break if percent: if len(color) == 1: color = [color[0], color[0], color[0]] # convert to 0 100% values as strings with % symbol colorStrList = [str(x * 100) + "%" for x in color] return webcolors.rgb_percent_to_hex(colorStrList) else: # assume integers return webcolors.rgb_to_hex(tuple(color)) raise GraphException('invalid color specification: %s' % color)