Re: [Matplotlib-users] using color as z-axis for plots From: Chad Kidder - 2008-12-08 20:20 ```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. ```

[Matplotlib-users] using color as z-axis for plots Chad Kidder <cckidder@gm...>
 Re: [Matplotlib-users] using color as z-axis for plots From: John Hunter - 2008-12-08 18:53 ```On Mon, Dec 8, 2008 at 12:45 PM, 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. Check out the scatter_demo -- scatter takes an optional argument 'c' for the color and an optional colormap http://matplotlib.sourceforge.net/users/screenshots.html#scatter-demo > > --Chad Kidder > > > > ------------------------------------------------------------------------------ > SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada. > The future of the web can't happen without you. Join us at MIX09 to help > pave the way to the Next Web now. Learn more and register at > http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/ > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > ```

 Re: [Matplotlib-users] using color as z-axis for plots From: Ryan May - 2008-12-08 18:55 ```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. For example: import numpy as np import matplotlib.pyplot as plt x = np.random.randn(100) y = np.random.randn(100) data = x**2 + y**2 plt.scatter(x, y, c=data) plt.show() Ryan -- Ryan May Graduate Research Assistant School of Meteorology University of Oklahoma ```

 Re: [Matplotlib-users] using color as z-axis for plots From: Chad Kidder - 2008-12-08 19:25 ```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. > > For example: > > import numpy as np > import matplotlib.pyplot as plt > > x = np.random.randn(100) > y = np.random.randn(100) > data = x**2 + y**2 > plt.scatter(x, y, c=data) > plt.show() > > Ryan > Close, but not quite what I want. Maybe this will tell what I want to do better: ---------------------- import numpy as n import matplotlib.pyplot as p nlines = 100 z = n.random.rand(nlines) x = n.array(range(nlines)) t1, t2 = n.meshgrid(x,z) y = t1+t2-0.5 for ii in range(nlines): p.plot(x,y[ii,:],color = str(z[ii])) p.show() ------------------- Instead of getting a grayscale plot out, I'd like to use a colormap like jet() or winter(). Any ideas there? --Chad Kidder ```

 Re: [Matplotlib-users] using color as z-axis for plots From: John Hunter - 2008-12-08 19:47 ```On Mon, Dec 8, 2008 at 1:25 PM, Chad Kidder wrote: ------------------- > Instead of getting a grayscale plot out, I'd like to use a colormap > like jet() or winter(). Any ideas there? How about? import matplotlib.cm as cm for ii in range(nlines): color = cm.jet(z[ii]) p.plot(x,y[ii,:],color=color) All of the mpl colormaps are callable, so if you pass in a [0..1] normalized value they will return an RGB tuple JDH ```

 Re: [Matplotlib-users] using color as z-axis for plots From: Eric Firing - 2008-12-08 19:57 ```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. >> >> For example: >> >> import numpy as np >> import matplotlib.pyplot as plt >> >> x = np.random.randn(100) >> y = np.random.randn(100) >> data = x**2 + y**2 >> plt.scatter(x, y, c=data) >> plt.show() >> >> Ryan >> > > Close, but not quite what I want. Maybe this will tell what I want to > do better: > > ---------------------- > import numpy as n > import matplotlib.pyplot as p > > nlines = 100 > z = n.random.rand(nlines) > x = n.array(range(nlines)) > t1, t2 = n.meshgrid(x,z) > y = t1+t2-0.5 > for ii in range(nlines): > p.plot(x,y[ii,:],color = str(z[ii])) > p.show() > ------------------- > Instead of getting a grayscale plot out, I'd like to use a colormap > like jet() or winter(). Any ideas there? In [6]:cmap = get_cmap('jet') In [7]:cmap(0.2) Out[7]:(0.0, 0.29999999999999999, 1.0, 1.0) In [8]:cmap(0.8) Out[8]:(1.0, 0.40740740740740755, 0.0, 1.0) The pyplot.get_cmap() function gets a colormap by name. Calling that colormap with a floating-point argument in the 0-1 range returns the mapped color as an rgba tuple, which will be accepted by the color kwarg of plot. You can use pyplot.normalize to map your z range to the 0-1 range: In [2]:norm = normalize(vmin=2, vmax=4) In [3]:norm(3) Out[3]:0.5 Alternatively, you can use a LineCollection. See the examples/pylab_examples/line_collection2.py script. Eric > > > > > > --Chad Kidder > > ------------------------------------------------------------------------------ > SF.Net email is Sponsored by MIX09, March 18-20, 2009 in Las Vegas, Nevada. > The future of the web can't happen without you. Join us at MIX09 to help > pave the way to the Next Web now. Learn more and register at > http://ad.doubleclick.net/clk;208669438;13503038;i?http://2009.visitmix.com/ > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users ```

 Re: [Matplotlib-users] using color as z-axis for plots From: Ryan May - 2008-12-08 20:00 ```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 ```

 Re: [Matplotlib-users] using color as z-axis for plots From: Chad Kidder - 2008-12-08 20:20 ```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. ```