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 > Matplotlib-users@lists.sourceforge.net > 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. ------------------------------------------------------------------------------ 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 Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users