# Colormaps

All,

I am having difficulty with a line on: http://scipy.org/LoktaVolterraTutorial

Here are the lines:

values = linspace(0.3, 0.9, 5)

vcolors = p.cm.autumn_r(linspace(0.3, 1., len(values)))

First of all, I can find no reference to autumn_r in the Matplotlib documentation. Also, using Aptana (eclipse), PyDev complains about the vcolors line with:

Undefined variable from import: autumn_r Lotka.py /scipy/src/pkg line 44 PyDev Problem

Secondly, I am used to using colormaps in Matlab, but not so much in Matplotlib. In Matlab, g=grey(256) produces an 256x3 matrix and each row is indexed by the numbers 1 through 256. Thus, if you have an image and pixel has a value 124, then row 124 gives an rgb triple that is used to color the pixel.

However, in the case of vcolors = p.cm.autumn_r(linspace(0.3, 1., len(values))), I'm really not sure what is going on. The linspace(0.3,1,len(values)) produces len(values) equally spaced numbers from 0.3 to 1. Now, how is autumn_r(array([ 0.3 , 0.475, 0.65 , 0.825, 1. ])) make any sense?

Thanks.

David.

2010/3/14 David Arnold <dwarnold45@...2108...>:

All,

I am having difficulty with a line on: http://scipy.org/LoktaVolterraTutorial

Here are the lines:

values = linspace(0.3, 0.9, 5)

vcolors = p.cm.autumn_r(linspace(0.3, 1., len(values)))

First of all, I can find no reference to autumn_r in the Matplotlib documentation. Also, using Aptana (eclipse), PyDev complains about the vcolors line with:

The colormap's data is defined in matplotlib._cm.py, there a
dictionary defining the names of the colormaps is defined from line
no. 5814 on. The colormaps are "imported", i.e. added to the
module-local namespace by "patching" locals() in matplolib.cm on line
43, where cmap_d also containes reversed versions of all the data
defined by matplotlib._cm, indicated by an trailing "_r" in the name.
Because the data isn't imported the usual way, your program (PyDev?)
will not find it.

Undefined variable from import: autumn_r Lotka.py /scipy/src/pkg line 44 PyDev Problem

Secondly, I am used to using colormaps in Matlab, but not so much in Matplotlib. In Matlab, g=grey(256) produces an 256x3 matrix and each row is indexed by the numbers 1 through 256. Thus, if you have an image and pixel has a value 124, then row 124 gives an rgb triple that is used to color the pixel.

I think you can reproduce the matlab behaviour by using:

result = some_colormap(numpy.linspace(0.0, 1.0, 256), [bytes = True]).

The optional bytes = True argument specifies to return integer \in [0,
255] colors. The return ndarray will have shape (256, 4), and an
indicing result[i] returns the ndarray array([r, g, b, a]). Note than
numpy and Python use zero-based indices, opposed to matlab's one-based
indices.

However, in the case of vcolors = p.cm.autumn_r(linspace(0.3, 1., len(values))), I'm really not sure what is going on. The linspace(0.3,1,len(values)) produces len(values) equally spaced numbers from 0.3 to 1. Now, how is autumn_r(array([ 0.3 , 0.475, 0.65 , 0.825, 1. ])) make any sense?

The first argument to some_colormap.__call__(X, alpha [= 1.0], bytes
[= False]) is the interpolation axis. I embed __call__()'s __doc__
string:

"""
*X* is either a scalar or an array (of any dimension).
If scalar, a tuple of rgba values is returned, otherwise
an array with the new shape = oldshape+(4,). If the X-values
are integers, then they are used as indices into the array.
If they are floating point, then they must be in the
interval (0.0, 1.0).
Alpha must be a scalar.
If bytes is False, the rgba values will be floats on a
0-1 scale; if True, they will be uint8, 0-255.
"""

I myself just did a short dive into the matplotlib code of cm.py,
_cm.py, and colors.py, so this are just my conclusions.

Friedrich