Re: [Matplotlib-users] How to shift colormap?
I learned some more about matplotlib colormaps from here: http://www.scipy.org/Cookbook/Matplotlib/Show_colormaps and tried to grasp cmap creation workflow. Here is GMT_haxby: _GMT_haxby_data = { 'blue': [ (0.0, 0.474509805441, 0.474509805441), (0.0322580635548, 0.588235318661, 0.588235318661), (0.0645161271095, 0.686274528503, 0.686274528503), (0.0967741906643, 0.784313738346, 0.784313738346), (0.129032254219, 0.831372559071, 0.831372559071), (0.161290317774, 0.878431379795, 0.878431379795), (0.193548381329, 0.941176474094, 0.941176474094), (0.225806444883, 0.972549021244, 0.972549021244), (0.258064508438, 1.0, 1.0), (0.290322571993, 1.0, 1.0), (0.322580635548, 1.0, 1.0), (0.354838699102, 0.941176474094, 0.941176474094), (0.387096762657, 0.882352948189, 0.882352948189), (0.419354826212, 0.784313738346, 0.784313738346), (0.451612889767, 0.68235296011, 0.68235296011), (0.483870953321, 0.658823549747, 0.658823549747), (0.516129016876, 0.635294139385, 0.635294139385), (0.548387110233, 0.552941203117, 0.552941203117), (0.580645143986, 0.474509805441, 0.474509805441), (0.612903237343, 0.407843142748, 0.407843142748), (0.645161271095, 0.341176480055, 0.341176480055), (0.677419364452, 0.270588248968, 0.270588248968), (0.709677398205, 0.29411765933, 0.29411765933), (0.741935491562, 0.305882364511, 0.305882364511), (0.774193525314, 0.352941185236, 0.352941185236), (0.806451618671, 0.486274510622, 0.486274510622), (0.838709652424, 0.61960786581, 0.61960786581), (0.870967745781, 0.68235296011, 0.68235296011), (0.903225779533, 0.768627464771, 0.768627464771), (0.93548387289, 0.843137264252, 0.843137264252), (0.967741906643, 0.921568632126, 0.921568632126), (1.0, 1.0, 1.0)], 'green': [ (0.0, 0.0, 0.0), (0.0322580635548, 0.0, 0.0), (0.0645161271095, 0.0196078438312, 0.0196078438312), (0.0967741906643, 0.0392156876624, 0.0392156876624), (0.129032254219, 0.0980392172933, 0.0980392172933), (0.161290317774, 0.156862750649, 0.156862750649), (0.193548381329, 0.4000596, 0.4000596), (0.225806444883, 0.505882382393, 0.505882382393), (0.258064508438, 0.686274528503, 0.686274528503), (0.290322571993, 0.745098054409, 0.745098054409), (0.322580635548, 0.792156875134, 0.792156875134), (0.354838699102, 0.882352948189, 0.882352948189), (0.387096762657, 0.921568632126, 0.921568632126), (0.419354826212, 0.921568632126, 0.921568632126), (0.451612889767, 0.92549020052, 0.92549020052), (0.483870953321, 0.960784316063, 0.960784316063), (0.516129016876, 1.0, 1.0), (0.548387110233, 0.960784316063, 0.960784316063), (0.580645143986, 0.92549020052, 0.92549020052), (0.612903237343, 0.843137264252, 0.843137264252), (0.645161271095, 0.741176486015, 0.741176486015), (0.677419364452, 0.627451002598, 0.627451002598), (0.709677398205, 0.458823531866, 0.458823531866), (0.741935491562, 0.313725501299, 0.313725501299), (0.774193525314, 0.352941185236, 0.352941185236), (0.806451618671, 0.486274510622, 0.486274510622), (0.838709652424, 0.61960786581, 0.61960786581), (0.870967745781, 0.701960802078, 0.701960802078), (0.903225779533, 0.768627464771, 0.768627464771), (0.93548387289, 0.843137264252, 0.843137264252), (0.967741906643, 0.921568632126, 0.921568632126), (1.0, 1.0, 1.0)], 'red': [ (0.0, 0.0392156876624, 0.0392156876624), (0.0322580635548, 0.156862750649, 0.156862750649), (0.0645161271095, 0.0784313753247, 0.0784313753247), (0.0967741906643, 0.0, 0.0), (0.129032254219, 0.0, 0.0), (0.161290317774, 0.0, 0.0), (0.193548381329, 0.101960785687, 0.101960785687), (0.225806444883, 0.0509803928435, 0.0509803928435), (0.258064508438, 0.0980392172933, 0.0980392172933), (0.290322571993, 0.196078434587, 0.196078434587), (0.322580635548, 0.26680574, 0.26680574), (0.354838699102, 0.380392163992, 0.380392163992), (0.387096762657, 0.415686279535, 0.415686279535), (0.419354826212, 0.486274510622, 0.486274510622), (0.451612889767, 0.541176497936, 0.541176497936), (0.483870953321, 0.674509823322, 0.674509823322), (0.516129016876, 0.803921580315, 0.803921580315), (0.548387110233, 0.874509811401, 0.874509811401), (0.580645143986, 0.941176474094, 0.941176474094), (0.612903237343, 0.96862745285, 0.96862745285), (0.645161271095, 1.0, 1.0), (0.677419364452, 1.0, 1.0), (0.709677398205, 0.956862747669, 0.956862747669), (0.741935491562, 0.93337307, 0.93337307), (0.774193525314, 1.0, 1.0), (0.806451618671, 1.0, 1.0), (0.838709652424, 1.0, 1.0), (0.870967745781, 0.960784316063, 0.960784316063), (0.903225779533, 1.0, 1.0), (0.93548387289, 1.0, 1.0), (0.967741906643, 1.0, 1.0), (1.0, 1.0, 1.0)]} Now imagine tweaking this map by hand, i.e. lower 0 value (~ 2/3 from whole cmap in example) from orange to green-blue without ruining it totally So I want to ask this question differently: Is there some tool (Inkscape, CorelDraw, Photoshop, ... anything) that would let me use GUI with some sliders so that I can try adjust matplotlib colormap? On Sun, Nov 6, 2011 at 9:58 PM, klo uo klo...@gmail.com wrote: Like in Basemap examples:
Re: [Matplotlib-users] How to shift colormap?
Or are matplotlib colormaps compatible with any other programs? On Fri, Nov 11, 2011 at 4:19 PM, klo uo klo...@gmail.com wrote: So I want to ask this question differently: Is there some tool (Inkscape, CorelDraw, Photoshop, ... anything) that would let me use GUI with some sliders so that I can try adjust matplotlib colormap? -- RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] How to shift colormap?
I have this script that uses the matplotlib Slider object to control the colormap of a histogram. This could be very close to what you want. Here is the script: ### begin colormap_slider.py # import math, copy import numpy from matplotlib import pyplot, colors, cm from matplotlib.widgets import Slider def cmap_powerlaw_adjust(cmap, a): ''' returns a new colormap based on the one given but adjusted via power-law: newcmap = oldcmap**a ''' if a 0.: return cmap cdict = copy.copy(cmap._segmentdata) fn = lambda x : (x[0]**a, x[1], x[2]) for key in ('red','green','blue'): cdict[key] = map(fn, cdict[key]) cdict[key].sort() assert (cdict[key][0]0 or cdict[key][-1]1), \ Resulting indices extend out of the [0, 1] segment. return colors.LinearSegmentedColormap('colormap',cdict,1024) def cmap_center_adjust(cmap, center_ratio): ''' returns a new colormap based on the one given but adjusted so that the old center point higher (0.5) or lower (0.5) ''' if not (0. center_ratio) (center_ratio 1.): return cmap a = math.log(center_ratio) / math.log(0.5) return cmap_powerlaw_adjust(cmap, a) def cmap_center_point_adjust(cmap, range, center): ''' converts center to a ratio between 0 and 1 of the range given and calls cmap_center_adjust(). returns a new adjusted colormap accordingly ''' if not ((range[0] center) and (center range[1])): return cmap return cmap_center_adjust(cmap, abs(center - range[0]) / abs(range[1] - range[0])) if __name__ == '__main__': ### create some 2D histogram-type data def func3(x,y): return (1- x/2 + x**5 + y**3)*numpy.exp(-x**2-y**2) x = numpy.linspace(-3.0, 3.0, 60) y = numpy.linspace(-3.0, 3.0, 60) X,Y = numpy.meshgrid(x, y) Z = func3(X, Y) extent = [x[0],x[-1],y[0],y[-1]] plotkwargs = { 'extent' : extent, 'origin' : 'lower', 'interpolation' : 'nearest', 'aspect' : 'auto'} ### interactively adjustable with a slider fig = pyplot.figure(figsize=(6,4)) fig.subplots_adjust(top=0.8) ax = fig.add_subplot(1,1,1) cmap = cm.seismic plt = ax.imshow(Z, cmap=cmap, **plotkwargs) cb = fig.colorbar(plt, ax=ax) axcmap = fig.add_axes([0.1, 0.85, 0.8, 0.05], axisbg='white') scmap = Slider(axcmap, '', 0.0, 1.0, valinit=0.5) def update(val): cmapcenter = scmap.val plt.set_cmap(cmap_center_adjust(cmap, cmapcenter)) scmap.on_changed(update) pyplot.show() ### end colormap_slider.py ### -- View this message in context: http://old.nabble.com/How-to-shift-colormap--tp32792283p32827012.html Sent from the matplotlib - users mailing list archive at Nabble.com. -- RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1 ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] How to shift colormap?
Thanks Johann, that is exactly what I asked for I knew that matplotlib can do GUI tricks but I didn't felt skilled to go there. Seeing you code it seems easy now, but it's always like that after you see the solution :D Cheers On Fri, Nov 11, 2011 at 6:05 PM, johanngoetz jgo...@ucla.edu wrote: I have this script that uses the matplotlib Slider object to control the colormap of a histogram. This could be very close to what you want. Here is the script: ### begin colormap_slider.py # import math, copy import numpy from matplotlib import pyplot, colors, cm from matplotlib.widgets import Slider def cmap_powerlaw_adjust(cmap, a): ''' returns a new colormap based on the one given but adjusted via power-law: newcmap = oldcmap**a ''' if a 0.: return cmap cdict = copy.copy(cmap._segmentdata) fn = lambda x : (x[0]**a, x[1], x[2]) for key in ('red','green','blue'): cdict[key] = map(fn, cdict[key]) cdict[key].sort() assert (cdict[key][0]0 or cdict[key][-1]1), \ Resulting indices extend out of the [0, 1] segment. return colors.LinearSegmentedColormap('colormap',cdict,1024) def cmap_center_adjust(cmap, center_ratio): ''' returns a new colormap based on the one given but adjusted so that the old center point higher (0.5) or lower (0.5) ''' if not (0. center_ratio) (center_ratio 1.): return cmap a = math.log(center_ratio) / math.log(0.5) return cmap_powerlaw_adjust(cmap, a) def cmap_center_point_adjust(cmap, range, center): ''' converts center to a ratio between 0 and 1 of the range given and calls cmap_center_adjust(). returns a new adjusted colormap accordingly ''' if not ((range[0] center) and (center range[1])): return cmap return cmap_center_adjust(cmap, abs(center - range[0]) / abs(range[1] - range[0])) if __name__ == '__main__': ### create some 2D histogram-type data def func3(x,y): return (1- x/2 + x**5 + y**3)*numpy.exp(-x**2-y**2) x = numpy.linspace(-3.0, 3.0, 60) y = numpy.linspace(-3.0, 3.0, 60) X,Y = numpy.meshgrid(x, y) Z = func3(X, Y) extent = [x[0],x[-1],y[0],y[-1]] plotkwargs = { 'extent' : extent, 'origin' : 'lower', 'interpolation' : 'nearest', 'aspect' : 'auto'} ### interactively adjustable with a slider fig = pyplot.figure(figsize=(6,4)) fig.subplots_adjust(top=0.8) ax = fig.add_subplot(1,1,1) cmap = cm.seismic plt = ax.imshow(Z, cmap=cmap, **plotkwargs) cb = fig.colorbar(plt, ax=ax) axcmap = fig.add_axes([0.1, 0.85, 0.8, 0.05], axisbg='white') scmap = Slider(axcmap, '', 0.0, 1.0, valinit=0.5) def update(val): cmapcenter = scmap.val plt.set_cmap(cmap_center_adjust(cmap, cmapcenter)) scmap.on_changed(update) pyplot.show() ### end colormap_slider.py ### -- View this message in context: http://old.nabble.com/How-to-shift-colormap--tp32792283p32827012.html Sent from the matplotlib - users mailing list archive at Nabble.com. -- RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1 ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- RSA(R) Conference 2012 Save $700 by Nov 18 Register now http://p.sf.net/sfu/rsa-sfdev2dev1___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users