Revision: 7071
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7071&view=rev
Author:   efiring
Date:     2009-04-29 19:38:35 +0000 (Wed, 29 Apr 2009)

Log Message:
-----------
Condense argument handling in fill_between, and add masked example

Modified Paths:
--------------
    trunk/matplotlib/examples/pylab_examples/fill_between.py
    trunk/matplotlib/lib/matplotlib/axes.py

Modified: trunk/matplotlib/examples/pylab_examples/fill_between.py
===================================================================
--- trunk/matplotlib/examples/pylab_examples/fill_between.py    2009-04-29 
16:07:27 UTC (rev 7070)
+++ trunk/matplotlib/examples/pylab_examples/fill_between.py    2009-04-29 
19:38:35 UTC (rev 7071)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python
 import matplotlib.mlab as mlab
-from pylab import figure, show
+from matplotlib.pyplot import figure, show
 import numpy as np
 
 x = np.arange(0.0, 2, 0.01)
@@ -27,11 +27,24 @@
 #   fill_between(x[where], y1[where],y2[where]
 # because of edge effects over multiple contiguous regions.
 fig = figure()
-ax = fig.add_subplot(111)
+ax = fig.add_subplot(211)
 ax.plot(x, y1, x, y2, color='black')
-ax.fill_between(x, y1, y2, where=y2>y1, facecolor='green')
+ax.fill_between(x, y1, y2, where=y2>=y1, facecolor='green')
 ax.fill_between(x, y1, y2, where=y2<=y1, facecolor='red')
 ax.set_title('fill between where')
 
+# Test support for masked arrays.
+y2 = np.ma.masked_greater(y2, 1.0)
+ax1 = fig.add_subplot(212, sharex=ax)
+ax1.plot(x, y1, x, y2, color='black')
+ax1.fill_between(x, y1, y2, where=y2>=y1, facecolor='green')
+ax1.fill_between(x, y1, y2, where=y2<=y1, facecolor='red')
+ax1.set_title('Now regions with y2>1 are masked')
+
+# This example illustrates a problem; because of the data
+# gridding, there are undesired unfilled triangles at the crossover
+# points.  A brute-force solution would be to interpolate all
+# arrays to a very fine grid before plotting.
+
 show()
 

Modified: trunk/matplotlib/lib/matplotlib/axes.py
===================================================================
--- trunk/matplotlib/lib/matplotlib/axes.py     2009-04-29 16:07:27 UTC (rev 
7070)
+++ trunk/matplotlib/lib/matplotlib/axes.py     2009-04-29 19:38:35 UTC (rev 
7071)
@@ -5832,40 +5832,29 @@
         self._process_unit_info(xdata=x, ydata=y1, kwargs=kwargs)
         self._process_unit_info(ydata=y2)
 
-        if where is None:
-            where = np.ones(len(x), np.bool)
-        else:
-            where = np.asarray(where)
-
-        maskedx = isinstance(x, np.ma.MaskedArray)
-        maskedy1 = isinstance(y1, np.ma.MaskedArray)
-        maskedy2 = isinstance(y2, np.ma.MaskedArray)
-
-        if (maskedx or maskedy1 or maskedy2):
-            if maskedx:
-                where = where & (~x.mask)
-
-            if maskedy1:
-                where = where & (~y1.mask)
-
-            if maskedy2:
-                where = where & (~y2.mask)
-
-
         # Convert the arrays so we can work with them
-        x = np.asarray(self.convert_xunits(x))
-        y1 = np.asarray(self.convert_yunits(y1))
-        y2 = np.asarray(self.convert_yunits(y2))
+        x = np.asanyarray(self.convert_xunits(x))
+        y1 = np.asanyarray(self.convert_yunits(y1))
+        y2 = np.asanyarray(self.convert_yunits(y2))
 
-        if not cbook.iterable(y1):
+        if y1.ndim == 0:
             y1 = np.ones_like(x)*y1
-
-        if not cbook.iterable(y2):
+        if y2.ndim == 0:
             y2 = np.ones_like(x)*y2
 
+        if where is None:
+            where = np.ones(len(x), np.bool)
+        else:
+            where = np.asarray(where, np.bool)
 
-        assert( (len(x)==len(y1)) and (len(x)==len(y2)) and len(x)==len(where))
+        if not (x.shape == y1.shape == y2.shape == where.shape):
+            raise ValueError("Argument dimensions are incompatible")
 
+        mask = reduce(ma.mask_or,
+                        [ma.getmask(x), ma.getmask(y1), ma.getmask(y2)])
+        if mask is not ma.nomask:
+            where &= ~mask
+
         polys = []
         for ind0, ind1 in mlab.contiguous_regions(where):
             theseverts = []


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Register Now & Save for Velocity, the Web Performance & Operations 
Conference from O'Reilly Media. Velocity features a full day of 
expert-led, hands-on workshops and two days of sessions from industry 
leaders in dedicated Performance & Operations tracks. Use code vel09scf 
and Save an extra 15% before 5/3. http://p.sf.net/sfu/velocityconf
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to