import matplotlib as mpl import matplotlib.pyplot as plt import numpy as np from collections import OrderedDict from itertools import cycle def make_cmap(colors, mapping=True): if isinstance(colors, dict): colors = np.array(colors.values()) bit_rgb = np.linspace(0, 1, 256) position = np.linspace(0, 1, len(colors)) _cols = colors[:] + 0 for i in range(len(colors)): for j in xrange(3): _cols[i][j] = bit_rgb[colors[i][j]] if mapping: cdict = {'red': [], 'green':[], 'blue':[]} for pos, color in zip(position, _cols): cdict['red'].append((pos, color[0], color[0])) cdict['green'].append((pos, color[1], color[1])) cdict['blue'].append((pos, color[2], color[2])) cmap = mpl.colors.LinearSegmentedColormap('my_colormap', cdict, 256) else: cmap = mpl.colors.ListedColormap(_cols, 'my_colormap') return cmap cm_bw = OrderedDict([('white', (255, 255, 255, 1)), ('black', (0, 0, 0, 1))]) cm_grace = OrderedDict([ ('red', (255, 0, 0, 255)), ('green', (0, 255, 0, 255)), ('blue', (0, 0, 255, 255)), ('yellow', (255, 255, 0, 255)), ('brown', (188, 143, 143, 255)), ('grey', (220, 220, 220, 255)), ('violet', (148, 0, 211, 255)), ('cyan', (0, 255, 255, 255)), ('magenta', (255, 0, 255, 255)), ('orange', (255, 165, 0, 255)), ('indigo', (114, 33, 188, 255)), ('maroon', (103, 7, 72, 255)), ('turquoise', (64, 224, 208, 255)), ('green4', (0, 139, 0, 255)) ]) cm_tuda = OrderedDict([ ('tud1a', (93, 133, 195, 255)), ('tud2a', (0, 156, 218, 255)), ('tud3a', (80, 182, 149, 255)), ('tud4a', (175, 204, 80, 255)), ('tud5a', (221, 223, 72, 255)), ('tud6a', (255, 224, 92, 255)), ('tud7a', (248, 186, 60, 255)), ('tud8a', (238, 122, 52, 255)), ('tud9a', (233, 80, 62, 255)), ('tud10a', (201, 48, 142, 255)), ('tud11a', (128, 69, 151, 255)) ]) cm_tudb = OrderedDict([ ('tud1b', (0, 90, 169, 255)), ('tud2b', (0, 131, 204, 255)), ('tud3b', (0, 157, 129, 255)), ('tud4b', (153, 192, 0, 255)), ('tud5b', (201, 212, 0, 255)), ('tud6b', (253, 202, 0, 255)), ('tud7b', (245, 163, 0, 255)), ('tud8b', (236, 101, 0, 255)), ('tud9b', (230, 0, 26, 255)), ('tud10b', (166, 0, 132, 255)), ('tud11b', (114, 16, 133, 255)) ]) cm_tudc = OrderedDict([ ('tud1c', (0, 78, 138, 255)), ('tud2c', (0, 104, 157, 255)), ('tud3c', (0, 136, 119, 255)), ('tud4c', (127, 171, 22, 255)), ('tud5c', (177, 189, 0, 255)), ('tud6c', (215, 172, 0, 255)), ('tud7c', (210, 135, 0, 255)), ('tud8c', (204, 76, 3, 255)), ('tud9c', (185, 15, 34, 255)), ('tud10c', (149, 17, 105, 255)), ('tud11c', (97, 28, 115, 255)) ]) cm_tudd = OrderedDict([ ('tud1d', (36, 53, 114, 255)), ('tud2d', (0, 78, 115, 255)), ('tud3d', (0, 113, 94, 255)), ('tud4d', (106, 139, 55, 255)), ('tud5d', (153, 166, 4, 255)), ('tud6d', (174, 142, 0, 255)), ('tud7d', (190, 111, 0, 255)), ('tud8d', (169, 73, 19, 255)), ('tud9d', (156, 28, 38, 255)), ('tud10d', (115, 32, 84, 255)), ('tud11d', (76, 34, 106, 255)) ]) def combine_maps(*args): color_map = OrderedDict() for d in args: for k, v in d.items(): color_map[k] = v return color_map cm_tud = combine_maps(cm_tuda, cm_tudb, cm_tudc, cm_tudd) all_colors = combine_maps(cm_bw, cm_grace, cm_tud) colors = cm_tud.values() symbols = cycle(['o', 't', 'd', 's', '+']) sym_map = {None: '0', 'o': '1', 's': '2', 'd': '3', 't': '6', '+': '9'} class ColorDict(OrderedDict): def __init__(self, *args, **kwargs): super(ColorDict, self).__init__(*args, **kwargs) for d in [cm_bw, cm_tuda, cm_tudb, cm_tudc, cm_tudd, cm_grace]: old_length = len(self) for k, c in enumerate(d.keys()): rgb = d[c][:3] self[rgb] = (k + old_length, c) self._new = OrderedDict() def __contains__(self, item): if isinstance(item, tuple): return item in self.keys() elif isinstance(item. basestring): return any([item == v[1] for v in self.values()]) else: return False def convert_color(self, color): c = tuple(color[0:3]) if c not in self.keys(): self[c] = (str(self.__len__()), ''.join('{:02X}'.format(a) for a in c)) self._new[c] = (str(self.__len__()-1), ''.join('{:02X}'.format(a) for a in c)) return self[c][0] def has_index(self, idx): return any([idx == v[0] for v in self.values()]) def new_colors(self): return self._new if __name__ == '__main__': pass