""" BICOLORMAP This program generators a two-color map, blue for negative, red for positive changes, with grey in the middle. The input argument is how much of a color gap there is between the red scale and the blue one. The function has four parameters: gap: sets how big of a gap between red and blue color scales there is (0=no gap; 1=pure red and pure blue) mingreen: how much green to include at the extremes of the red-blue color scale redbluemix: how much red to mix with the blue and vice versa at the extremes of the scale epsilon: what fraction of the colormap to make gray in the middle Examples: bicolormap(gap=0,mingreen=0,redbluemix=1,epsilon=0) # From pure red to pure blue with white in the middle bicolormap(gap=0,mingreen=0,redbluemix=0,epsilon=0.1) # Red -> yellow -> gray -> turquoise -> blue bicolormap(gap=0.3,mingreen=0.2,redbluemix=0,epsilon=0.01) # Red and blue with a sharp distinction between Version: 2013sep13 by cliffk """ ## Create colormap def bicolormap(gap=0.1,mingreen=0.2,redbluemix=0.5,epsilon=0.01): from matplotlib.colors import LinearSegmentedColormap as makecolormap mng=mingreen; # Minimum amount of green to add into the colors mix=redbluemix; # How much red to mix with the blue an vice versa eps=epsilon; # How much of the center of the colormap to make gray omg=1-gap # omg = one minus gap cdict = {'red': ((0.00000, 0.0, 0.0), (0.5-eps, mix, omg), (0.50000, omg, omg), (0.5+eps, omg, 1.0), (1.00000, 1.0, 1.0)), 'green': ((0.00000, mng, mng), (0.5-eps, omg, omg), (0.50000, omg, omg), (0.5+eps, omg, omg), (1.00000, mng, mng)), 'blue': ((0.00000, 1.0, 1.0), (0.5-eps, 1.0, omg), (0.50000, omg, omg), (0.5+eps, omg, mix), (1.00000, 0.0, 0.0))} cmap = makecolormap('bicolormap',cdict,256) return cmap ## Show the staggering beauty of the color map's infinite possibilities def testcolormap(): from pylab import figure, subplot, imshow, colorbar, rand, show maps=[] maps.append(bicolormap()) # Default ,should work for most things maps.append(bicolormap(gap=0,mingreen=0,redbluemix=1,epsilon=0)) # From pure red to pure blue with white in the middle maps.append(bicolormap(gap=0,mingreen=0,redbluemix=0,epsilon=0.1)) # Red -> yellow -> gray -> turquoise -> blue maps.append(bicolormap(gap=0.3,mingreen=0.2,redbluemix=0,epsilon=0.01)) # Red and blue with a sharp distinction between nexamples=len(maps) figure(figsize=(5*nexamples,4)) for m in range(nexamples): subplot(1,nexamples,m+1) imshow(rand(20,20),cmap=maps[m],interpolation='none'); colorbar() show()