On 02/28/2012 06:28 AM, Andreas H. wrote: >>> On Tuesday, February 28, 2012, Andreas H. wrote: >>> >>>> Good morning, >>>> >>>> I'm creating the attached plot using pcolormesh(). What I would like to >>>> do now is draw contour lines at +/- 2.5%, which follow the grid edges. >>>> >>>> The problem is that when I use contour(), the lines drawn do not follow >>>> the grid edges but seem to be interpolated somehow. >>>> >>>> Do you have an idea how to draw the contour lines following the grid >>>> edges? >>>> >>>> Your insight is very much appreciated :) >>>> >>>> Cheers, >>>> Andreas. >>>> >>> >>> This is because of a subtle difference in how pcolor-like functions and >>> contour-like functions work. I always forget which is which, but one >>> assumes that the z value lies on the vertices of the grid while the >>> other >>> assumes that it lies in the middle of each grid point. This is why you >>> see >>> them slightly offset from each other. >> >> Thanks, Ben! >> >> To `pcolormesh`, I pass the *edges* of the grid: >> >> xbin = linspace(0, 12, nxbin + 1) >> ybin = np.linspace(-90, 90, nybin + 1) >> >> pl = spl.pcolormesh(xbin, ybin, pdata.T, cmap=cmap, edgecolors='None', >> vmin=-5, vmax=20) >> >> `contour`, however, wants the coordinates themselves. So I do >> >> spl.contour((xbin[:-1]+xbin[1:])/2., (ybin[:-1]+ybin[1:])/2, pdata.T, >> [-2.5, 2.5]) >> >> Still, the outcome is, well, unexpected to me. Actually, no matter if >> contour wants centres or edges, the actual behaviour seems strange. There >> is some interpolation going on, apparently. The input `pdata` has shape >> (12, 72) (or 72,12), and I definitely wouldn't expect this sub-grid >> movement in the x-direction. >> >> Any ideas? > > Okay, after some diving into matplotlib sources, I guess the interpolation > comes within the function `QuadContourSet._get_allsegs_and_allkinds`. So > there seems to be no way to accomplish what I actually want with the > current matplotlib API. Correct? > > If I wanted to do something about this, I would need to > > * implement a class `GriddedContourSet`, derived from `ContourSet`, where > I implement the `_get_allsegs_and_allkinds` method appropriately. > * add an additional keyword argument to `contour()` to make this gridded > contourset an option when calling `contour()`. > > Is this all correct? If yes, I might start working on this if I get the > time ...
It is not at all clear to me what you want to do, as compared to what contour does. Can you illustrate with an extremely simple example? Maybe even a scanned sketch, if necessary? Do you want the contour lines to be stepped, like the rectilinear boundaries of the pcolormesh cells--that is, composed entirely of horizontal and vertical line segments? Eric > > Cheers, > Andreas. > > > > > ------------------------------------------------------------------------------ > Keep Your Developer Skills Current with LearnDevNow! > The most comprehensive online learning library for Microsoft developers > is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, > Metro Style Apps, more. Free future releases when you subscribe now! > http://p.sf.net/sfu/learndevnow-d2d > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users ------------------------------------------------------------------------------ Keep Your Developer Skills Current with LearnDevNow! The most comprehensive online learning library for Microsoft developers is just $99.99! Visual Studio, SharePoint, SQL - plus HTML5, CSS3, MVC3, Metro Style Apps, more. Free future releases when you subscribe now! http://p.sf.net/sfu/learndevnow-d2d _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users