|
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.
|