Index: lib/matplotlib/axes.py
===================================================================
--- lib/matplotlib/axes.py	(revision 8982)
+++ lib/matplotlib/axes.py	(working copy)
@@ -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
Index: lib/matplotlib/collections.py
===================================================================
--- lib/matplotlib/collections.py	(revision 8982)
+++ lib/matplotlib/collections.py	(working copy)
@@ -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()
 
