From: <wea...@us...> - 2011-02-18 19:28:35
|
Revision: 8988 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8988&view=rev Author: weathergod Date: 2011-02-18 19:28:29 +0000 (Fri, 18 Feb 2011) Log Message: ----------- scatter() now supports empty arrays as input (i.e., scatter([], []) is now valid). Enabling this required fixes in both scatter() and in collections.py. Collections now support empty versions of themselves more correctly due to these fixes. Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/axes.py trunk/matplotlib/lib/matplotlib/collections.py Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2011-02-17 16:44:28 UTC (rev 8987) +++ trunk/matplotlib/CHANGELOG 2011-02-18 19:28:29 UTC (rev 8988) @@ -1,3 +1,6 @@ +2011-02-18 scatter([], []) is now valid. Also fixed issues + with empty collections - BVR + 2011-02-07 Quick workaround for dviread bug #3175113 - JKS 2011-02-05 Add cbook memory monitoring for Windows, using Modified: trunk/matplotlib/lib/matplotlib/axes.py =================================================================== --- trunk/matplotlib/lib/matplotlib/axes.py 2011-02-17 16:44:28 UTC (rev 8987) +++ trunk/matplotlib/lib/matplotlib/axes.py 2011-02-18 19:28:29 UTC (rev 8988) @@ -5832,24 +5832,17 @@ else: collection.autoscale_None() - temp_x = x - temp_y = y - - minx = np.amin(temp_x) - maxx = np.amax(temp_x) - miny = np.amin(temp_y) - maxy = np.amax(temp_y) - - w = maxx-minx - h = maxy-miny - # the pad is a little hack to deal with the fact that we don't # want to transform all the symbols whose scales are in points # to data coords to get the exact bounding box for efficiency # reasons. It can be done right if this is deemed important - padx, pady = 0.05*w, 0.05*h - corners = (minx-padx, miny-pady), (maxx+padx, maxy+pady) - self.update_datalim( corners) + # Also, only bother with this padding if there is anything to draw. + if self._xmargin < 0.05 and x.size > 0 : + self.set_xmargin(0.05) + + if self._ymargin < 0.05 and x.size > 0 : + self.set_ymargin(0.05) + self.autoscale_view() # add the collection last Modified: trunk/matplotlib/lib/matplotlib/collections.py =================================================================== --- trunk/matplotlib/lib/matplotlib/collections.py 2011-02-17 16:44:28 UTC (rev 8987) +++ trunk/matplotlib/lib/matplotlib/collections.py 2011-02-18 19:28:29 UTC (rev 8988) @@ -59,6 +59,8 @@ scalar mappable will be made to set the face colors. """ _offsets = np.array([], np.float_) + # _offsets must be a Nx2 array! + _offsets.shape = (0, 2) _transOffset = transforms.IdentityTransform() _transforms = [] @@ -95,10 +97,11 @@ self._uniform_offsets = None self._offsets = np.array([], np.float_) + # Force _offsets to be Nx2 + self._offsets.shape = (0, 2) if offsets is not None: offsets = np.asarray(offsets) - if len(offsets.shape) == 1: - offsets = offsets[np.newaxis,:] # Make it Nx2. + offsets.shape = (-1, 2) # Make it Nx2 if transOffset is not None: self._offsets = offsets self._transOffset = transOffset @@ -148,13 +151,17 @@ transOffset = self._transOffset offsets = self._offsets paths = self.get_paths() + + if not transform.is_affine: paths = [transform.transform_path_non_affine(p) for p in paths] transform = transform.get_affine() if not transOffset.is_affine: offsets = transOffset.transform_non_affine(offsets) transOffset = transOffset.get_affine() + offsets = np.asarray(offsets, np.float_) + offsets.shape = (-1, 2) # Make it Nx2 result = mpath.get_path_collection_extents( transform.frozen(), paths, self.get_transforms(), @@ -176,6 +183,7 @@ offsets = self._offsets paths = self.get_paths() + if self.have_units(): paths = [] for path in self.get_paths(): @@ -184,17 +192,19 @@ xs = self.convert_xunits(xs) ys = self.convert_yunits(ys) paths.append(mpath.Path(zip(xs, ys), path.codes)) - if len(self._offsets): - xs = self.convert_xunits(self._offsets[:,0]) - ys = self.convert_yunits(self._offsets[:,1]) + + if offsets.size > 0: + xs = self.convert_xunits(offsets[:,0]) + ys = self.convert_yunits(offsets[:,1]) offsets = zip(xs, ys) offsets = np.asarray(offsets, np.float_) + offsets.shape = (-1, 2) # Make it Nx2 if not transform.is_affine: paths = [transform.transform_path_non_affine(path) for path in paths] transform = transform.get_affine() - if not transOffset.is_affine: + if not transOffset.is_affine : offsets = transOffset.transform_non_affine(offsets) transOffset = transOffset.get_affine() @@ -258,8 +268,7 @@ ACCEPTS: float or sequence of floats """ offsets = np.asarray(offsets, np.float_) - if len(offsets.shape) == 1: - offsets = offsets[np.newaxis,:] # Make it Nx2. + offsets.shape = (-1, 2) # Make it Nx2 #This decision is based on how they are initialized above if self._uniform_offsets is None: self._offsets = offsets @@ -1221,6 +1230,7 @@ offsets = zip(xs, ys) offsets = np.asarray(offsets, np.float_) + offsets.shape = (-1, 2) # Make it Nx2 self.update_scalarmappable() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |