How do you create and use your own color maps?
We create our own color map by copying the default color map:
>>> import vcs
>>> v = vcs.init()
>>> my_cm = v.createcolormap('my_cm', 'default')
We customize the
values by setting each
my_cm.index dictionary entry
to the desired
Here is a loop that sets
to a linear deep-blue to light-blue color map
over the range of color indices 16 to 239, inclusive:
for icell in range(16,240): rvalue = int( float(icell-16)/(239.-16.) * 90. ) gvalue = rvalue bvalue = 100 my_cmap.index[icell] = [rvalue, gvalue, bvalue]
Color index 16 is deep-blue, and color index 239 is light-blue. In the next section I'll explain why we only set color indices 16 to 239.
To use colors from a color map, the simplest way is to set
color attribute of an object to the desired color
index value. For instance, if you have a text-table
my_ttab, the following makes the text
my_ttab.color = 241
Many VCS objects have
color attributes which you
can set this way, including the
fillarea, line, marker, text-combined, and text-table objects.
More commonly, color maps are used in drawing filled contour plots
(e.g. boxfill and isofill). You could manually set each contour
level/range to the colors of your choice, but there's an easier
create a list of levels
to linearly map color indices over a
range to those levels.
Say we have data with a minimum of -3.4 and a maximum of 5.6. Creating a list of levels and a corresponding map of color indices is as simple as:
>>> levels = vcs.mkscale(-3.4, 5.6, 5, zero=1)
>>> print levels
[-4.0, -2.0, 0.0, 2.0, 4.0, 6.0]
>>> print vcs.getcolors(levels)
[16, 127, 128, 184, 239]
The default is for
getcolors to scale within the
range of color indices of 16 to 239, inclusive. Sometimes it's
good to avoid the first few color indices, since elements may
default to those values: the default text-table, for instance,
color = 1.
240 to 255 do not change with different color maps
and are not user-changable,
so usually you will not scale a color range spanning those values.
getcolors command works quite well with its
default settings, but you might want more control. See
Finally, once we have a list of color indices that correspond
to our levels, can set the respective graphics method
attributes accordingly. For instance, if we
have an isofill graphics method
my_fill_gm.levels to our list of levels and
my_fill_gm.fillareacolors to our list
of corresponding color indices. And that's it!
help(vcs.getcolors)) gives some more information.
Descriptions of these VCS function are also found in the
document (v1.0 has a few typos though).
Notes: This discussion applies to CDAT 3.3.