From: <md...@us...> - 2008-06-05 17:09:10
|
Revision: 5403 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5403&view=rev Author: mdboom Date: 2008-06-05 10:09:04 -0700 (Thu, 05 Jun 2008) Log Message: ----------- Fix dpi-changing-related bugs in Axes.scatter() Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/examples/api/collections_demo.py trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/collections.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2008-06-05 17:06:16 UTC (rev 5402) +++ trunk/matplotlib/CHANGELOG 2008-06-05 17:09:04 UTC (rev 5403) @@ -1,3 +1,6 @@ +2008-06-05 Fix some dpi-changing-related problems with PolyCollection, + as called by Axes.scatter() - MGD + 2008-06-05 Fix image drawing so there is no extra space to the right or bottom - MGD Modified: trunk/matplotlib/examples/api/collections_demo.py =================================================================== --- trunk/matplotlib/examples/api/collections_demo.py 2008-06-05 17:06:16 UTC (rev 5402) +++ trunk/matplotlib/examples/api/collections_demo.py 2008-06-05 17:09:04 UTC (rev 5403) @@ -33,8 +33,9 @@ spiral = zip(xx,yy) # Make some offsets -xo = N.random.randn(npts) -yo = N.random.randn(npts) +rs = N.random.RandomState([12345678]) +xo = rs.randn(npts) +yo = rs.randn(npts) xyo = zip(xo, yo) # Make a list of colors cycling through the rgbcmyk series. @@ -45,7 +46,7 @@ a = fig.add_subplot(2,2,1) col = collections.LineCollection([spiral], offsets=xyo, transOffset=a.transData) -trans = transforms.Affine2D().scale(fig.dpi/72.0) +trans = fig.dpi_scale_trans + transforms.Affine2D().scale(1.0/72.0) col.set_transform(trans) # the points to pixels transform # Note: the first argument to the collection initializer # must be a list of sequences of x,y tuples; we have only @@ -112,7 +113,7 @@ xx = (0.2 + (ym-yy)/ym)**2 * N.cos(yy-0.4) * 0.5 segs = [] for i in range(ncurves): - xxx = xx + 0.02*N.random.randn(nverts) + xxx = xx + 0.02*rs.randn(nverts) curve = zip(xxx, yy*100) segs.append(curve) Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2008-06-05 17:06:16 UTC (rev 5402) +++ trunk/matplotlib/lib/matplotlib/axes.py 2008-06-05 17:09:04 UTC (rev 5403) @@ -4603,15 +4603,8 @@ rescale = np.sqrt(max(verts[:,0]**2+verts[:,1]**2)) verts /= rescale - scales = np.asarray(scales) - scales = np.sqrt(scales * self.figure.dpi / 72.) - if len(scales)==1: - verts = [scales[0]*verts] - else: - # todo -- make this nx friendly - verts = [verts*s for s in scales] collection = mcoll.PolyCollection( - verts, + verts, scales, facecolors = colors, edgecolors = edgecolors, linewidths = linewidths, Modified: trunk/matplotlib/lib/matplotlib/collections.py =================================================================== --- trunk/matplotlib/lib/matplotlib/collections.py 2008-06-05 17:06:16 UTC (rev 5402) +++ trunk/matplotlib/lib/matplotlib/collections.py 2008-06-05 17:09:04 UTC (rev 5403) @@ -492,15 +492,19 @@ renderer.close_group(self.__class__.__name__) class PolyCollection(Collection): - def __init__(self, verts, **kwargs): + def __init__(self, verts, sizes = (1, ), **kwargs): """ verts is a sequence of ( verts0, verts1, ...) where verts_i is a sequence of xy tuples of vertices, or an equivalent numpy array of shape (nv,2). + sizes gives the area of the circle circumscribing the + polygon in points^2 + %(Collection)s """ Collection.__init__(self,**kwargs) + self._sizes = sizes self.set_verts(verts) __init__.__doc__ = cbook.dedent(__init__.__doc__) % artist.kwdocd @@ -511,6 +515,15 @@ def get_paths(self): return self._paths + def draw(self, renderer): + # sizes is the area of the circle circumscribing the polygon + # in points^2 + self._transforms = [ + transforms.Affine2D().scale( + (np.sqrt(x) * renderer.dpi / 72.0)) + for x in self._sizes] + return Collection.draw(self, renderer) + class BrokenBarHCollection(PolyCollection): """ A colleciton of horizontal bars spanning yrange with a sequence of This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |