On Mar 27, 2010, at 1:13 , Ariel Rokem wrote:

In particular, I am interested in using the plt.cm.RdYlBu_r colormap. If the data has both negative and positive values, I want 0 to map to the central value of this colormap (a pale whitish yellow) and I want negative values to be in blue and positive numbers to be in red.

not sure if this is what you want (I'd never heard of RdYlBu_r...I need to go read up!), but I've used a similar colormap with the code posted below. You might be able to modify it for your case.


                hope this helps!

                        bb

from pylab import *

def bluewhitered(a,N=256):
    bottom =    [0,   0,  0.5]
    botmiddle = [0,  0.5,  1]
    middle =    [1,   1,   1]
    topmiddle = [1,   0,   0]
    top =       [0.5, 0,   0]

    lims=[a.min(),a.max()]

    if lims[0]<0 and lims[1]>0:
        ratio=abs(lims[0])/(abs(lims[0])+lims[1])

        cdict={}
        cdict['red']=[]
        cdict['green']=[]
        cdict['blue']=[]

        # negative part
        red=[(0.0, 0.0, 0.0),
             (ratio/2, 0.0, 0.0),
             (ratio, 1.0, 1.0)]
        green=[(0.0, 0.0, 0.0),
             (ratio/2, 0.5, 0.5),
             (ratio, 1.0, 1.0)]
        blue=[(0.0, 0.5, 0.5),
             (ratio/2, 1, 1),
             (ratio, 1.0, 1.0)]

        cdict['red'].extend(red)
        cdict['green'].extend(green)
        cdict['blue'].extend(blue)

        nratio=1-(1-ratio)/2.0
        # positive part
        red=[(ratio, 1.0, 1.0),
             (nratio, 1.0, 1.0),
             (1, 0.5, 0.5)]
        green=[(ratio, 1.0, 1.0),
             (nratio, 0., 0.),
             (1, 0.0, 0.0)]
        blue=[(ratio, 1., 1.),
             (nratio, 0, 0),
             (1, 0, 0)]

        cdict['red'].extend(red)
        cdict['green'].extend(green)
        cdict['blue'].extend(blue)




    elif lims[0]>=0:  # all positive
        cdict={}
        cdict['red']=[]
        cdict['green']=[]
        cdict['blue']=[]

        ratio=0.0
        nratio=0.5

        # positive part
        red=[(ratio, 1.0, 1.0),
             (nratio, 1.0, 1.0),
             (1, 0.5, 0.5)]
        green=[(ratio, 1.0, 1.0),
             (nratio, 0., 0.),
             (1, 0.0, 0.0)]
        blue=[(ratio, 1., 1.),
             (nratio, 0, 0),
             (1, 0, 0)]

        cdict['red'].extend(red)
        cdict['green'].extend(green)
        cdict['blue'].extend(blue)

    else: # all negative
        cdict={}
        cdict['red']=[]
        cdict['green']=[]
        cdict['blue']=[]

        ratio=1.0

        # negative part
        red=[(0.0, 0.0, 0.0),
             (ratio/2, 0.0, 0.0),
             (ratio, 1.0, 1.0)]
        green=[(0.0, 0.0, 0.0),
             (ratio/2, 0.5, 0.5),
             (ratio, 1.0, 1.0)]
        blue=[(0.0, 0.5, 0.5),
             (ratio/2, 1, 1),
             (ratio, 1.0, 1.0)]

        cdict['red'].extend(red)
        cdict['green'].extend(green)
        cdict['blue'].extend(blue)

my_cmap = matplotlib.colors.LinearSegmentedColormap ('my_colormap',cdict,N)


    return my_cmap

if __name__=="__main__":

    a=randn(20,20)
    my_cmap=bluewhitered(a,256)



    clf()
    pcolor(a,cmap=my_cmap)
    colorbar()







--
Brian Blais
bbl...@bryant.edu
http://web.bryant.edu/~bblais
http://bblais.blogspot.com/



------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to