|
From: Ryan M. <rm...@gm...> - 2008-12-08 20:00:26
|
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
--
Ryan May
Graduate Research Assistant
School of Meteorology
University of Oklahoma
|