|
From: wiswit <cha...@gm...> - 2012-06-05 17:45:36
|
Thanks Eric. This is quite an informative answer about colormap!
The first part of the answer is exactly what I need.
cheers,
Chao
efiring wrote:
>
> On 06/02/2012 03:37 AM, Chao YUE wrote:
>> Dear all,
>>
>> I find I would like to make some change from the existing colormaps. for
>> example, I would like to change the color at the beginning of the
>> colormap (let's say mat.cm.jet) but I still
>> want to use the remaining other colors. So is there way I can easily use
>> some functions already in matplotlib to extract the colorlist and levels
>> from a mat.cm.jet?
>> Then I can just change the first color of the colorlist, and use
>> mat.colors.LinearSegmentedColormap.from_list to easily construct the
>> colormap I want.
>
> Try playing with something like this (in ipython --pylab):
>
> jetcmap = cm.get_cmap("jet", 10) #generate a jet map with 10 values
> jet_vals = jetcmap(np.arange(10)) #extract those values as an array
> jet_vals[0] = [0.1, 0, 0.1, 1] #change the first value
> newcmap = mpl.colors.LinearSegmentedColormap.from_list("newjet", jet_vals)
> imshow(rand(18,20), cmap=newcmap, vmin=0, vmax=1, interpolation="nearest")
> colorbar()
>
> Alternatively, you can copy the cm.datad['jet'] dictionary (datad is a
> dictionary of dictionaries), modify it, and use it to initialize a
> custom LinearSegmentedColormap instance. See
> http://matplotlib.sourceforge.net/examples/pylab_examples/custom_cmap.html.
>
>
>>
>> I can use mat.cm.jet._segmentdata to retrieve the dictionary. I also
>> have a look at the source code
>
> In general it is not a good idea to work with attributes with leading
> underscores, which flag them as especially low-level
> implementation-dependent details. cm.jet._segmentdata can be accessed as
> cm.datad['jet'].
>
> Note also that the _segmentdata is not what is used directly to look up
> the colors; instead it is used to generate the lookup table (_lut
> attribute). See below.
>
>> /usr/local/lib/python2.7/dist-packages/matplotlib/colors.py but I didn't
>> manage to find a solution.
>>
>> both mat.colors.LinearSegmentedColormap and mat.colors.ListedColormap
>> finally calls mat.colors.Colormap.__init__ and then I don't understand
>> how these colorlist are really used for plotting.
>>
>
> Typically it is a two-stage process. First, a data array is passed to a
> Normalize instance which scales it to the range from zero to one.
> Second, that scaled array is passed to the Colormap instance, which uses
> its lookup table to map any point in the 0-1 range to a color.
>
> Less commonly, instead of passing an array of floats to the Colormap
> instance, one may pass in an integer array, in which case these integers
> are used directly as indices into the lookup table (which is the _lut
> attribute of the Colormap instance.)
>
>> Another question, where can I find the source code where mat.cm.jet is
>> defined?
>
> Good question; the answer is obscured by somewhat convoluted coding in
> cm.py. The relevant part is this:
>
> for cmapname in datad.iterkeys():
> cmap_d[cmapname] = _generate_cmap(cmapname, LUTSIZE)
>
> locals().update(cmap_d)
>
>
> The first block is filling a dictionary with LinearSegmentedColormap
> instances corresponding to the named sets of segment data from _cm.py.
> The "locals" line is the tricky part: it is adding each entry in that
> dictionary to the local namespace, so that cm.cmap_d["jet"] can be
> accessed as cm.jet, etc.
>
> There is a bit more to it, because Colormap instances can handle three
> special values: over range, under range, and "bad" (masked). See
> http://matplotlib.sourceforge.net/examples/pylab_examples/contourf_demo.html
> and
> http://matplotlib.sourceforge.net/examples/pylab_examples/image_masked.html
>
> Eric
>
>
>>
>> thanks et cheers,
>>
>> Chao
>
> ------------------------------------------------------------------------------
> Live Security Virtual Conference
> Exclusive live event will cover all the ways today's security and
> threat landscape has changed and how IT managers can respond. Discussions
> will include endpoint security, mobile security and the latest in malware
> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/
> _______________________________________________
> Matplotlib-users mailing list
> Mat...@li...
> https://lists.sourceforge.net/lists/listinfo/matplotlib-users
>
>
--
View this message in context: http://old.nabble.com/get-colorlist-and-values-from-existing-matplotlib-colormaps--tp33949604p33965531.html
Sent from the matplotlib - users mailing list archive at Nabble.com.
|