Re: [Matplotlib-users] selecting part of a contour to plot
Thanks to Benjamin Root and Jae-Joon Lee for their responses. The solution that I had come up with in the mean time is similar to Jae-Joon's suggestion. I did: c = contour(z,level,colors='k') xy = c.collections[0].get_paths()[0].vertices # produces (N,2) array of points plot(xy[:,0],xy[:,1],'w') c.collections[0].get_paths() returns a list of Path objects. These have the attribute vertices which contains the values used to draw the contour. Jae-Joon's method is a bit more straightforward than mine, though it's nice to know where those contour paths are stored. Jon On Tue, 2010-06-22 at 22:40 -0400, Jae-Joon Lee wrote: contour creates list of LineCollection objects (per each level I suppose) which is stored in collections attribute. For example, cntr = contour(A, levels) then cntr.collections[i] is a LineCollection objects that is associated with levels[i]. And you can change colors of each line in the LineCollection object with set_edgecolors method. So, assuming that there is two contour lines for the first level. cntr.collections[0].set_edgecolors([none, r]) will change the color of the first contour to none (i.e., not drawn) and the second one to red. But you need to figure out which one is the one you want. IHTH, -JJ On Tue, Jun 22, 2010 at 2:46 PM, Jonathan Slavin jsla...@cfa.harvard.edu wrote: To all: I'm making a plot with an image and a contour on it. I use only one level in the call to contour, but it results in two distinct contours, an inner closed one and an outer open one. I want to plot only the outer piece. How might I go about that? I've been looking at the properties of the ContourSet object returned by the call to contour but can't find anything useful yet. Is there an attribute of ContourSet objects that contains the (x,y) values for the contour? Is there some way to see that a ContourSet object has separate pieces? Any help would be appreciated. Thanks, Jon -- ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- __ Jonathan D. Slavin Harvard-Smithsonian CfA jsla...@cfa.harvard.edu 60 Garden Street, MS 83 phone: (617) 496-7981 Cambridge, MA 02138-1516 cell: (781) 363-0035 USA __ -- ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] selecting part of a contour to plot
Jon, One thing you can do is to manually specify the levels to contour for in the contour call, or just specify the number of contours (and contour() will figure out the levels for you). The fourth argument to contour() allows you to give a sequence of values (or an integer) for the isopleths. So, if you want just one line (but have it chosen automatically): contour(x, y, z, 1) If you want a contour to always be for the value of 4.5, for example, then: contour(x, y, z, [4.5]) Should do the trick. I hope that helps, Ben Root On Tue, Jun 22, 2010 at 1:46 PM, Jonathan Slavin jsla...@cfa.harvard.eduwrote: To all: I'm making a plot with an image and a contour on it. I use only one level in the call to contour, but it results in two distinct contours, an inner closed one and an outer open one. I want to plot only the outer piece. How might I go about that? I've been looking at the properties of the ContourSet object returned by the call to contour but can't find anything useful yet. Is there an attribute of ContourSet objects that contains the (x,y) values for the contour? Is there some way to see that a ContourSet object has separate pieces? Any help would be appreciated. Thanks, Jon -- ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] selecting part of a contour to plot
Actually, I just re-read your original message and noticed that you were specifying your levels (I believe). The double set of contours depends on what your values are. If you want to make absolutely sure that there aren't extra lines, you could contour a boolean array: contour(x, y, z 4.5, [0, 1]) That should do the trick as well (assuming you know the level that you want the isopleth for). Ben Root On Tue, Jun 22, 2010 at 6:27 PM, Benjamin Root ben.r...@ou.edu wrote: Jon, One thing you can do is to manually specify the levels to contour for in the contour call, or just specify the number of contours (and contour() will figure out the levels for you). The fourth argument to contour() allows you to give a sequence of values (or an integer) for the isopleths. So, if you want just one line (but have it chosen automatically): contour(x, y, z, 1) If you want a contour to always be for the value of 4.5, for example, then: contour(x, y, z, [4.5]) Should do the trick. I hope that helps, Ben Root On Tue, Jun 22, 2010 at 1:46 PM, Jonathan Slavin jsla...@cfa.harvard.eduwrote: To all: I'm making a plot with an image and a contour on it. I use only one level in the call to contour, but it results in two distinct contours, an inner closed one and an outer open one. I want to plot only the outer piece. How might I go about that? I've been looking at the properties of the ContourSet object returned by the call to contour but can't find anything useful yet. Is there an attribute of ContourSet objects that contains the (x,y) values for the contour? Is there some way to see that a ContourSet object has separate pieces? Any help would be appreciated. Thanks, Jon -- ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users
Re: [Matplotlib-users] selecting part of a contour to plot
contour creates list of LineCollection objects (per each level I suppose) which is stored in collections attribute. For example, cntr = contour(A, levels) then cntr.collections[i] is a LineCollection objects that is associated with levels[i]. And you can change colors of each line in the LineCollection object with set_edgecolors method. So, assuming that there is two contour lines for the first level. cntr.collections[0].set_edgecolors([none, r]) will change the color of the first contour to none (i.e., not drawn) and the second one to red. But you need to figure out which one is the one you want. IHTH, -JJ On Tue, Jun 22, 2010 at 2:46 PM, Jonathan Slavin jsla...@cfa.harvard.edu wrote: To all: I'm making a plot with an image and a contour on it. I use only one level in the call to contour, but it results in two distinct contours, an inner closed one and an outer open one. I want to plot only the outer piece. How might I go about that? I've been looking at the properties of the ContourSet object returned by the call to contour but can't find anything useful yet. Is there an attribute of ContourSet objects that contains the (x,y) values for the contour? Is there some way to see that a ContourSet object has separate pieces? Any help would be appreciated. Thanks, Jon -- ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users -- ThinkGeek and WIRED's GeekDad team up for the Ultimate GeekDad Father's Day Giveaway. ONE MASSIVE PRIZE to the lucky parental unit. See the prize list and enter to win: http://p.sf.net/sfu/thinkgeek-promo ___ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users