Hi Chloe,

_segmentdata - that's what I was looking for!

Thanks a lot also for that bit of code!

Cheers - Ariel




On Sun, Mar 28, 2010 at 1:53 AM, Chloe Lewis <chle...@berkeley.edu> wrote:

> Like so, not that it couldn't be improved:
>
> import matplotlib.cm as cm
> import matplotlib.colors as colors
> import pylab as p
>
> def rgb_to_dict(value, cbar):
>    return dict(zip(('red','green','blue','alpha'), cbar(value)))
>
> def subcolorbar(xmin, xmax, cbar):
>    '''Returns the part of cbar between xmin, xmax, scaled to 0,1.'''
>    assert xmin < xmax
>    assert xmax <=1
>    cd =  cbar._segmentdata.copy()
>    colornames = ('red','green','blue')
>    rgbmin, rgbmax = rgb_to_dict(xmin, cbar), rgb_to_dict(xmax, cbar)
>    for k in cd:
>        tmp = [x for x in cd[k] if x[0] >= xmin and x[0] <= xmax]
>        if tmp == [] or tmp[0][0] > xmin:
>            tmp = [(xmin, rgbmin[k], rgbmin[k])] + tmp
>        if tmp == [] or tmp[-1][0] < xmax:
>            tmp = tmp + [ (xmax,rgbmax[k], rgbmax[k])]
>        #now scale all this to (0,1)
>        square = zip(*tmp)
>        xbreaks = [(x - xmin)/(xmax-xmin) for x in square[0]]
>        square[0] = xbreaks
>        tmp = zip(*square)
>        cd[k] = tmp
>    return colors.LinearSegmentedColormap('local', cd, N=256)
>
> if __name__=="__main__":
>    subset = [.1, .3, .6]
>    scb = subcolorbar(min(subset), max(subset), cm.jet)
>    print 'main segments', cm.jet._segmentdata
>    print 'smaller', scb._segmentdata
>    p.subplot(121)
>    p.scatter([1,2,3],[1,2,3],s=49, c = subset, cmap=scb)
>    p.colorbar()
>    p.subplot(122)
>    p.scatter([2,3,4],[2,3,4],s=49, c =[.001, .5, .99], cmap=cm.jet)
>    p.colorbar()
>    p.show()
>
>
>
>
> On Mar 27, 2010, at 11:52 PM, Chloe Lewis wrote:
>
>  To zoom in on the relevant section of a colorbar -- I convinced myself
>> once that I'd need an auxiliary function to define a new cdict that
>> covers only the current section of the original cdict. (and then
>> define a new colorbar from the cdict, and maybe do a little norming of
>> the data).
>>
>> _segmentdata will give you the original cdict for whichever colorbar
>> you're using.
>>
>> Not that I got around to actually doing it! But it would be great for
>> paper readability and passing-around of plots.
>>
>> &C
>>
>>
>>
>> On Mar 27, 2010, at 9:24 PM, Ariel Rokem wrote:
>>
>>  Hi Friedrich,
>>>
>>> Thanks a lot for your response. I think that you are right - using
>>> the vmin/vmax args into imshow (as well as into pcolor) does seem to
>>> do what I want. Great!
>>>
>>> The only thing that remains now is to simultaneously stretch the
>>> colormap in the image itself to this range, while also restricting
>>> the range of the colorbar which is displayed, to only the part of
>>> the colormap which actually has values (in the attached .png, I only
>>> want values between 0 and ~0.33 to appear in the colorbar, not from
>>> negative -0.33 to +0.33).
>>>
>>> Does anyone know how to do that?
>>>
>>> Thanks again -
>>>
>>> Ariel
>>>
>>> On Sat, Mar 27, 2010 at 3:29 PM, Friedrich Romstedt <
>>> friedrichromst...@gmail.com
>>>
>>>> wrote:
>>>>
>>> 2010/3/27 Ariel Rokem <aro...@berkeley.edu>:
>>>
>>>> I am trying to make a color-map which will respond to the range of
>>>>
>>> values in
>>>
>>>> the data itself. That is - I want to take one of the mpl colormaps
>>>>
>>> and use
>>>
>>>> parts of it, depending on the range of the data.
>>>>
>>>> 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. Also - I would want
>>>>
>>> to use the
>>>
>>>> parts of the colormap that represent how far away the smallest and
>>>>
>>> largest
>>>
>>>> values in the data are from 0. So - if my data is in the range
>>>>
>>> [x1,x2] I
>>>
>>>> would want to use the part of the colormap in indices
>>>> 127-127*abs(x1)/(x2-x1) through 127+127*x2/(x2-x1). If the data only
>>>> includes positive numbers, I would want to only use the blue part
>>>>
>>> of the
>>>
>>>> colormap and if there are negative numbers, I would want to only
>>>>
>>> use the red
>>>
>>>> part of the colormap (in these cases, I would also want to take
>>>>
>>> only a
>>>
>>>> portion  of the colormap which represents the size of the interval
>>>>
>>> [x1,x2]
>>>
>>>> relative to the interval [0,x1] or [x2,0], as the case may be).
>>>>
>>>> I think that this might be useful when comparing matrices
>>>>
>>> generated from
>>>
>>>> different data, but with the same computation, such as correlation
>>>>
>>> or
>>>
>>>> coherence (see http://nipy.sourceforge.net/nitime/examples/
>>>>
>>> fmri.html to get
>>>
>>>> an idea of what I mean).
>>>>
>>>
>>> I might miss something important, but why not use pcolor() with kwargs
>>> vmin and vmax,
>>>
>>> http://matplotlib.sourceforge.net/api/axes_api.html#matplotlib.axes.Axes.pcolor
>>> ,
>>> e.g.:
>>>
>>> maxval = numpy.abs(C).max()
>>> pcolor(C, vmin = -maxval, vmax = maxval)
>>>
>>> As far as I can judge, this should have the desired effect.
>>>
>>> Friedrich
>>>
>>>
>>>
>>> --
>>> Ariel Rokem
>>> Helen Wills Neuroscience Institute
>>> University of California, Berkeley
>>> http://argentum.ucbso.berkeley.edu/ariel
>>> <
>>> colorbar
>>> .png
>>>
>>>>
>>>> ------------------------------------------------------------------------------
>>> 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
>>>
>>
>>
>>
>> ------------------------------------------------------------------------------
>> 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
>>
>
>


-- 
Ariel Rokem
Helen Wills Neuroscience Institute
University of California, Berkeley
http://argentum.ucbso.berkeley.edu/ariel
------------------------------------------------------------------------------
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