From: <pki...@us...> - 2008-11-14 22:19:06
|
Revision: 6404 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6404&view=rev Author: pkienzle Date: 2008-11-14 22:19:02 +0000 (Fri, 14 Nov 2008) Log Message: ----------- patches: allow partial rings with Wedge Modified Paths: -------------- trunk/matplotlib/examples/api/patch_collection.py trunk/matplotlib/lib/matplotlib/patches.py Modified: trunk/matplotlib/examples/api/patch_collection.py =================================================================== --- trunk/matplotlib/examples/api/patch_collection.py 2008-11-14 15:33:32 UTC (rev 6403) +++ trunk/matplotlib/examples/api/patch_collection.py 2008-11-14 22:19:02 UTC (rev 6404) @@ -25,12 +25,20 @@ wedge = Wedge((x1,y1), r, t1, t2) patches.append(wedge) +# Some limiting conditions on Wedge +patches += [ + Wedge((.3,.7), .1, 0, 360), # Full circle + Wedge((.7,.8), .2, 0, 360, width=0.05), # Full ring + Wedge((.8,.3), .2, 0, 45), # Full sector + Wedge((.8,.3), .2, 45, 90, width=0.10), # Ring sector +] + for i in range(N): polygon = Polygon(pylab.rand(N,2), True) patches.append(polygon) colors = 100*pylab.rand(len(patches)) -p = PatchCollection(patches, cmap=matplotlib.cm.jet) +p = PatchCollection(patches, cmap=matplotlib.cm.jet, alpha=0.4) p.set_array(pylab.array(colors)) ax.add_collection(p) pylab.colorbar(p) Modified: trunk/matplotlib/lib/matplotlib/patches.py =================================================================== --- trunk/matplotlib/lib/matplotlib/patches.py 2008-11-14 15:33:32 UTC (rev 6403) +++ trunk/matplotlib/lib/matplotlib/patches.py 2008-11-14 22:19:02 UTC (rev 6404) @@ -712,13 +712,18 @@ :meth:`~matplotlib.patches.Polygon.set_xy` instead.""") class Wedge(Patch): + """ + Wedge shaped patch. + """ def __str__(self): return "Wedge(%g,%g)"%(self.theta1,self.theta2) - def __init__(self, center, r, theta1, theta2, **kwargs): + def __init__(self, center, r, theta1, theta2, width=0, **kwargs): """ Draw a wedge centered at *x*, *y* center with radius *r* that - sweeps *theta1* to *theta2* (in degrees). + sweeps *theta1* to *theta2* (in degrees). If *width* is given, + then a partial wedge is drawn from inner radius *r* - *width* + to outer radius *r*. Valid kwargs are: @@ -726,24 +731,43 @@ """ Patch.__init__(self, **kwargs) self.center = center - self.r = r - self.theta1 = theta1 - self.theta2 = theta2 + self.r,self.width = r,width + self.theta1,self.theta2 = theta1,theta2 + + # Inner and outer rings are connected unless the annulus is complete + delta=theta2-theta1 + if abs((theta2-theta1) - 360) <= 1e-12: + theta1,theta2 = 0,360 + connector = Path.MOVETO + else: + connector = Path.LINETO + + # Form the outer ring + arc = Path.arc(theta1,theta2) + + if width != 0: + # Partial annulus needs to draw the outter ring + # followed by a reversed and scaled inner ring + v1 = arc.vertices + v2 = arc.vertices[::-1]*float(r-width)/r + v = np.vstack([v1,v2,v1[0,:],(0,0)]) + c = np.hstack([arc.codes,arc.codes,connector,Path.CLOSEPOLY]) + c[len(arc.codes)]=connector + else: + # Wedge doesn't need an inner ring + v = np.vstack([arc.vertices,[(0,0),arc.vertices[0,:],(0,0)]]) + c = np.hstack([arc.codes,[connector,connector,Path.CLOSEPOLY]]) + + # Shift and scale the wedge to the final location. + v *= r + v += np.asarray(center) + self._path = Path(v,c) self._patch_transform = transforms.IdentityTransform() - self._path = Path.wedge(self.theta1, self.theta2) __init__.__doc__ = cbook.dedent(__init__.__doc__) % artist.kwdocd def get_path(self): return self._path - def get_patch_transform(self): - x = self.convert_xunits(self.center[0]) - y = self.convert_yunits(self.center[1]) - rx = self.convert_xunits(self.r) - ry = self.convert_yunits(self.r) - self._patch_transform = transforms.Affine2D() \ - .scale(rx, ry).translate(x, y) - return self._patch_transform # COVERAGE NOTE: Not used internally or from examples class Arrow(Patch): @@ -3042,4 +3066,3 @@ self.fill = fill_orig #renderer.close_group('patch') - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |