From: Oz N. <na...@gm...> - 2008-09-20 09:14:09
|
I'm trying again to understand how to plot scattered data from array into contour graph. I looked at http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data and I understand I have to grid my data. However, in most samples the plot is of a function. Let's say I want to plot some geological data, suppose water table head, and I have the following 3D aray x y head head = ((0, 0, 10), (1, 0, 13), (2, 0, 11), (3, 0, 12), (1, 2, 11)) matplotlib has lot's of restrictions about how I can plot and interpolate the data, which causes a lot of confusion in my side... I'll be happy if someone could supply me a clue of how to plot contours of data which comes in arrays or raster format and not an equation. Thanks, Oz |
From: Goyo <goy...@gm...> - 2008-09-20 12:19:25
|
Try something like this: import pylab as pl head = ((0, 0, 10), (1, 0, 13), (2, 0, 11), (3, 0, 12), (1, 2, 11)) x, y, z = zip(*head) xi, yi = pl.arange(0, 4, 0.1), pl.arange(0, 3, 0.1) g = pl.griddata(x, y, z, xi, yi) pl.scatter(x, y) pl.contour(xi, yi, g) Level values are automatically chosen in this example but you can provide the number of values or a sequence of them. Note that no extrapolation is done outside convex hull defined by input data. Goyo El sáb, 20-09-2008 a las 11:13 +0200, Oz Nahum escribió: > I'm trying again to understand how to plot scattered data from array into > contour graph. > I looked at > http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data > and I understand I have to grid my data. However, in most samples the plot > is of a function. > Let's say I want to plot some geological data, suppose water table head, and > I have the following 3D aray > x y head > head = ((0, 0, 10), > (1, 0, 13), > (2, 0, 11), > (3, 0, 12), > (1, 2, 11)) > matplotlib has lot's of restrictions about how I can plot and interpolate > the data, which causes a lot of confusion in my side... > I'll be happy if someone could supply me a clue of how to plot contours of > data which comes in arrays or raster format and not an equation. > Thanks, > Oz > > ------------------------------------------------------------------------- > This SF.Net email is sponsored by the Moblin Your Move Developer's challenge > Build the coolest Linux based applications with Moblin SDK & win great prizes > Grand prize is a trip for two to an Open Source event anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users |
From: Oz N. <na...@gm...> - 2008-09-25 13:15:56
|
Hi, Thanks for your reply and appologies for my late response. This indeed does the job. But after playing a little bit with the code, I have discovered a few things: first, I'd rather work with lists not tuples so I could actually change my huge array of points. second the array I described is kind of a pseudo 2D: It has one big row. head = [[0, 0, 10], [1, 0, 13], [2, 0, 11], [3, 0, 12], [1, 2, 11]] When I try to use a 3D array, with rows and columns import pylab as pl head = [[[0, 0, 10], [0, 1, 13]], [[1, 0, 11], [1, 1, 12]], [[2, 1, 11], [2, 2, 14]]] x, y, z = zip(*head) xi, yi = pl.arange(0, 4, 0.1), pl.arange(0, 3, 0.1) g = pl.griddata(x, y, z, xi, yi) pl.scatter(x, y) pl.contour(xi, yi, g) pl.show() I get this error: Traceback (most recent call last): File "asfplot.py", line 9, in <module> x, y, z = zip(*head) ValueError: need more than 2 values to unpack On Sat, Sep 20, 2008 at 2:19 PM, Goyo <goy...@gm...> wrote: > Try something like this: > > import pylab as pl > > head = ((0, 0, 10), > (1, 0, 13), > (2, 0, 11), > (3, 0, 12), > (1, 2, 11)) > > x, y, z = zip(*head) > xi, yi = pl.arange(0, 4, 0.1), pl.arange(0, 3, 0.1) > g = pl.griddata(x, y, z, xi, yi) > pl.scatter(x, y) > pl.contour(xi, yi, g) > > Level values are automatically chosen in this example but you can > provide the number of values or a sequence of them. > > Note that no extrapolation is done outside convex hull defined by input > data. > > Goyo > > El sáb, 20-09-2008 a las 11:13 +0200, Oz Nahum escribió: > > I'm trying again to understand how to plot scattered data from array into > > contour graph. > > I looked at > > > http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data > > and I understand I have to grid my data. However, in most samples the > plot > > is of a function. > > Let's say I want to plot some geological data, suppose water table > head, and > > I have the following 3D aray > > x y head > > head = ((0, 0, 10), > > (1, 0, 13), > > (2, 0, 11), > > (3, 0, 12), > > (1, 2, 11)) > > matplotlib has lot's of restrictions about how I can plot and > interpolate > > the data, which causes a lot of confusion in my side... > > I'll be happy if someone could supply me a clue of how to plot > contours of > > data which comes in arrays or raster format and not an equation. > > Thanks, > > Oz > > > > ------------------------------------------------------------------------- > > This SF.Net email is sponsored by the Moblin Your Move Developer's > challenge > > Build the coolest Linux based applications with Moblin SDK & win great > prizes > > Grand prize is a trip for two to an Open Source event anywhere in the > world > > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > > _______________________________________________ > > Matplotlib-users mailing list > > Mat...@li... > > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > -- .''`. : :' : We are debian.org. Lower your prices, `. `' surrender your code. `- We will add your hardware and software distinctiveness to our own. Resistance is futile. ---- Imagine there's no countries It isn't hard to do Nothing to kill or die for And no religion too Imagine all the people Living life in peace ---- You all must read 'The God Delusion' http://en.wikipedia.org/wiki/The_God_Delusion --- when one person suffers from a delusion it is called insanity. When many people suffer from a delusion it is called religion." Robert Pirsig, Zen and the Art of Motorcycle Maintenance |
From: Goyo <goy...@gm...> - 2008-09-25 19:50:56
|
Just give a look at zip(*head) and see that now it return two values so you can't assign it to three variables. ¿What's the meaning of that data arrange? I can't make any sense of plotting a 2D scatter from a 3D array. Goyo El jue, 25-09-2008 a las 15:15 +0200, Oz Nahum escribió: > Hi, > Thanks for your reply and appologies for my late response. > This indeed does the job. But after playing a little bit with the > code, I have discovered a few things: > first, I'd rather work with lists not tuples so I could actually > change my huge array of points. > second the array I described is kind of a pseudo 2D: > It has one big row. > head = [[0, 0, 10], > [1, 0, 13], > [2, 0, 11], > [3, 0, 12], > [1, 2, 11]] > > When I try to use a 3D array, with rows and columns > > import pylab as pl > > head = [[[0, 0, 10], [0, 1, 13]], > [[1, 0, 11], [1, 1, 12]], > [[2, 1, 11], [2, 2, 14]]] > > x, y, z = zip(*head) > xi, yi = pl.arange(0, 4, 0.1), pl.arange(0, 3, 0.1) > g = pl.griddata(x, y, z, xi, yi) > pl.scatter(x, y) > pl.contour(xi, yi, g) > pl.show() > > I get this error: > Traceback (most recent call last): > File "asfplot.py", line 9, in <module> > x, y, z = zip(*head) > ValueError: need more than 2 values to unpack > > > On Sat, Sep 20, 2008 at 2:19 PM, Goyo <goy...@gm...> wrote: > Try something like this: > > import pylab as pl > > head = ((0, 0, 10), > (1, 0, 13), > (2, 0, 11), > (3, 0, 12), > (1, 2, 11)) > > > x, y, z = zip(*head) > xi, yi = pl.arange(0, 4, 0.1), pl.arange(0, 3, 0.1) > g = pl.griddata(x, y, z, xi, yi) > pl.scatter(x, y) > pl.contour(xi, yi, g) > > Level values are automatically chosen in this example but you > can > provide the number of values or a sequence of them. > > Note that no extrapolation is done outside convex hull defined > by input > data. > > Goyo > > El sáb, 20-09-2008 a las 11:13 +0200, Oz Nahum escribió: > > > I'm trying again to understand how to plot scattered data > from array into > > contour graph. > > I looked at > > > http://www.scipy.org/Cookbook/Matplotlib/Gridding_irregularly_spaced_data > > and I understand I have to grid my data. However, in most > samples the plot > > is of a function. > > Let's say I want to plot some geological data, suppose > water table head, and > > I have the following 3D aray > > x y head > > head = ((0, 0, 10), > > (1, 0, 13), > > (2, 0, 11), > > (3, 0, 12), > > (1, 2, 11)) > > matplotlib has lot's of restrictions about how I can plot > and interpolate > > the data, which causes a lot of confusion in my side... > > I'll be happy if someone could supply me a clue of how to > plot contours of > > data which comes in arrays or raster format and not an > equation. > > Thanks, > > Oz > > > > > > ------------------------------------------------------------------------- > > This SF.Net email is sponsored by the Moblin Your Move > Developer's challenge > > Build the coolest Linux based applications with Moblin SDK & > win great prizes > > Grand prize is a trip for two to an Open Source event > anywhere in the world > > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > > _______________________________________________ > > Matplotlib-users mailing list > > Mat...@li... > > > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > > > -- > .''`. > : :' : We are debian.org. Lower your prices, > `. `' surrender your code. > `- We will add your hardware and software > distinctiveness to our own. > Resistance is futile. > > ---- > Imagine there's no countries > It isn't hard to do > Nothing to kill or die for > And no religion too > Imagine all the people > Living life in peace > ---- > You all must read 'The God Delusion' > http://en.wikipedia.org/wiki/The_God_Delusion > --- > when one person suffers from a delusion it is called insanity. When > many people suffer from a delusion it is called religion." > Robert Pirsig, Zen and the Art of Motorcycle Maintenance > > |
From: Oz N. <na...@gm...> - 2008-09-25 20:20:03
|
>¿What's the meaning of that data arrange? I can't make any sense of >plotting a 2D scatter from a 3D array. when I wrote: head = [[0, 0, 10], [1, 0, 13], [2, 0, 11], [3, 0, 12], [1, 2, 11]] my meaning was to represent point of intereset with x, y coordinates and the 3rd number was height for example. I felt like I couldn't access the individual points easily, because their are located in on big list... So I wanted to have the list broken into rows, and the each row represents a value on the y axis... like this: head = [ [[0, 0, 10], [0, 0, 13]], [[2, 0, 11], [3, 0, 12]], ] But that's redundant I think now, after looking into the function zip. Maybe I could write head in the following way: # j = 0 1 head = [ [[ 0, 10], [ 1, 13]], # i =0 [[ 0, 11], [ 1, 12]], # i =1 ] But actually after understanding what zip does, I think I don't need it anyway... Talking about this: can you give me an example of another use of zip ? not just zip(*head) I did help(zip) but I could partially understand what it does. I learned more by doing: x,y,z = zip(*head) and then printing x,y,z individually. Thanks for your help so far. Oz |
From: Goyo <goy...@gm...> - 2008-09-26 20:37:20
|
El jue, 25-09-2008 a las 22:19 +0200, Oz Nahum escribió: > >¿What's the meaning of that data arrange? I can't make any sense of > >plotting a 2D scatter from a 3D array. > > when I wrote: > head = [[0, 0, 10], > [1, 0, 13], > [2, 0, 11], > [3, 0, 12], > [1, 2, 11]] > > my meaning was to represent point of intereset with x, y coordinates > and the 3rd number was height for example. > I felt like I couldn't access the individual points easily, because > their are located in on big list... > So I wanted to have the list broken into rows, and the each row > represents a value on the y axis... like this: > head = [ > [[0, 0, 10], [0, 0, 13]], > [[2, 0, 11], [3, 0, 12]], > ] Mm... maybe this is better for your eyes but not for processing, I think. > > But that's redundant I think now, after looking into the function > zip. > Maybe I could write head in the following way: > > # j = 0 1 > head = [ > [[ 0, 10], [ 1, 13]], # i =0 > [[ 0, 11], [ 1, 12]], # i =1 > ] The same. Parsing a data file usually yields a sequence of rows (records), data processing functions usually expects columns of homogeneous data and convert from records to columns and back is pretty straightforward using zip. If you want to use a different representation for your data you'll need to handle more complex structures and conversions. Do it if you think it pays (sometimes it does). > But actually after understanding what zip does, I think I don't need > it anyway... > Talking about this: can you give me an example of another use of zip ? > not just zip(*head) > > I did help(zip) but I could partially understand what it does. I > learned more by doing: > x,y,z = zip(*head) > and then printing x,y,z individually. There is no other use I can think of. If you think of the arguments passed to zip as rows, it returns the columns. If the arguments are columns, zip returns rows. How you name things depends on how you think of your data. There is no other use I can think of. zip expects each row (if they are rows) to be passed as an argument so you usually need that * thing to unpack them. When you call zip(*x), x being a sequence or array-like, you are actually passing each element of x as an argument to zip. Try this: numbers = [1, 2, 3, 4, 5] english = ['one', 'two', 'three', 'four', 'five'] spanish = ['uno', 'dos', 'tres', 'cuatro', 'cinco'] x = [numbers, english, spanish] zip(numbers, english, spanish) zip(x) zip(*x) You can learn about unpacking and zipping sequences reading the Python Tutorial or another similar resource (maybe Dive into Python dives into it, not sure but a useful reading anyway). Goyo |