|
From: Chad K. <cck...@gm...> - 2008-12-08 20:20:14
|
On Dec 8, 2008, at 2:00 PM, Ryan May wrote:
> Chad Kidder wrote:
>> On Dec 8, 2008, at 12:55 PM, Ryan May wrote:
>>> Chad Kidder wrote:
>>>> I've got many series of data that I want to plot, and each has
>>>> an additional scalar that is valid for the whole series. What
>>>> I want to do is plot all these series on top of each other
>>>> (plot can do this just fine), but with the additional scalar
>>>> changing the color, efectively using color as the z-axis. I'm
>>>> not seeing how to do that. If there was a function where I
>>>> could give a color map a value and it would spit out the color,
>>>> that would work, but I haven't seen it. Thanks for your help.
>>> Try using scatter instead of plot. Specifically, the 'c' keyword
>>> argument:
>>>
>>> *c*:
>>> a color. *c* can be a single color format string, or a
>>> sequence of color specifications of length *N*, or a
>>> sequence of *N* numbers to be mapped to colors using the
>>> *cmap* and *norm* specified via kwargs (see below). Note
>>> that *c* should not be a single numeric RGB or RGBA
>>> sequence because that is indistinguishable from an array
>>> of values to be colormapped. *c* can be a 2-D array in
>>> which the rows are RGB or RGBA, however.
>
> Here's what you're looking for:
>
> import numpy as n
> import matplotlib.pyplot as p
> import matplotlib.colors as mcolors
> import matplotlib.cm as cm
>
> cmap = cm.get_cmap('winter')
> norm = mcolors.Normalize(0, 1) #Range of z
>
> nlines = 100
> z = n.random.rand(nlines)
> x = n.arange(nlines)
> t1, t2 = n.meshgrid(x,z)
> y = t1+t2-0.5
>
> #Uses normalize to map z values to range of 0 to 1.
> #Cmap maps these normalized values to colors
> colors = cmap(norm(z))
> for ii in range(nlines):
> p.plot(x, y[ii], color=colors[ii])
> p.show()
>
> Ryan
Thanks all. I had tried something close, but it didn't work. This
works great.
|