line 1486 of _backend_agg.cpp says /* TODO: Support clip paths */
So, it seems that, apparently, clipping with arbitrary path has not been implemented yet for gouraud shading (pcolormesh will be properly clipped if shading is not used). I hope Michael pick this up some time soon. Meanwhile, you may open a feature request ticket on this. Regards, -JJ On Wed, Dec 2, 2009 at 5:13 PM, Tony S Yu <tsy...@gmail.com> wrote: > > On Dec 2, 2009, at 3:53 PM, Tony S Yu wrote: > >> Hi, >> >> I'm having hard time understanding some of the differences between functions >> used to plot color patches (not sure what to call them). >> >> I'm trying to fill a curve with a nonuniform color patch (like fill or >> fill_between but the color in the patch varies). I've attached code that >> almost does what I want; my question concerns the color patch (which is >> created by the call to plt.pcolor in the code below). I'd like to have >> nonuniform grid spacing in the color values, and also shading (i.e. >> interpolation of color between points). Here's what I understand: >> >> pcolor: allows nonuniform grid spacing, but it doesn't do shading. >> >> imshow: allows color shading, but requires uniform spacing >> >> pcolormesh: allows color interpolation and nonuniform grid spacing >> >> pcolormesh seems like the ideal candidate, but when I replace pcolor with >> pcolormesh (code commented out below pcolor call), the path doesn't get >> clipped by set_clip_path (but no errors are raised); in other words, the >> color shading fills the entire plot area. Is this a bug? >> >> Is there a way of making this plot work that I've overlooked? >> >> Thanks! >> -Tony > > > Nevermind, I found NonUniformImage after some digging. The working code is > attached below if anyone is interested. > > If anyone knows the answer, I'm still curious if the clipping behavior for > pcolormesh is a bug. > > Thanks, > -Tony > > > > #~~~~ example code > > import numpy as np > import matplotlib.pyplot as plt > from matplotlib.image import NonUniformImage > > > def nonuniform_imshow(x, y, C, **kwargs): > """Plot image with nonuniform pixel spacing. > > This function is a convenience method for calling image.NonUniformImage. > """ > ax = plt.gca() > im = NonUniformImage(ax, **kwargs) > im.set_data(x, y, C) > ax.images.append(im) > return im > > > def plot_filled_curve(x, y, c): > """Plot curve filled with linear color gradient > > Parameters > ---------- > x, y : arrays > points describing curve > c : array > color values underneath curve. Must match the lengths of `x` and `y`. > """ > # add end points so that fill extends to the x-axis > x_closed = np.concatenate([x[:1], x, x[-1:]]) > y_closed = np.concatenate([[0], y, [0]]) > # fill between doesn't work here b/c it returns a PolyCollection, plus it > # adds the lower half of the plot by adding a Rect with a border > patch, = plt.fill(x_closed, y_closed, facecolor='none') > im = nonuniform_imshow(x, [0, y.max()], np.vstack((c, c)), > interpolation='bilinear', cmap=plt.cm.gray) > im.set_clip_path(patch) > > if __name__ == '__main__': > line = np.linspace(0, 1, 6) > x = np.hstack((line, [1, 2])) > y = np.hstack((line**2, [1, 1])) > c = np.hstack((line, [0, 0])) > plot_filled_curve(x, y, c) > plt.show() > > > > ------------------------------------------------------------------------------ > Join us December 9, 2009 for the Red Hat Virtual Experience, > a free event focused on virtualization and cloud computing. > Attend in-depth sessions from your desk. Your couch. Anywhere. > http://p.sf.net/sfu/redhat-sfdev2dev > _______________________________________________ > Matplotlib-users mailing list > Matplotlib-users@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > ------------------------------------------------------------------------------ Join us December 9, 2009 for the Red Hat Virtual Experience, a free event focused on virtualization and cloud computing. Attend in-depth sessions from your desk. Your couch. Anywhere. http://p.sf.net/sfu/redhat-sfdev2dev _______________________________________________ Matplotlib-users mailing list Matplotlib-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-users