Revision: 8333
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=8333&view=rev
Author:   jswhit
Date:     2010-05-23 16:49:22 +0000 (Sun, 23 May 2010)

Log Message:
-----------
handle masked arrays for unstructured meshes.

Modified Paths:
--------------
    trunk/toolkits/basemap/examples/ploticos.py
    trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py

Modified: trunk/toolkits/basemap/examples/ploticos.py
===================================================================
--- trunk/toolkits/basemap/examples/ploticos.py 2010-05-23 12:31:00 UTC (rev 
8332)
+++ trunk/toolkits/basemap/examples/ploticos.py 2010-05-23 16:49:22 UTC (rev 
8333)
@@ -1,6 +1,7 @@
 from mpl_toolkits.basemap import Basemap, NetCDFFile
 import matplotlib.pyplot as plt
 import numpy as np
+from numpy import ma
 # read in orography of icosahedral global grid.
 f = NetCDFFile('C02562.orog.nc')
 lons = (180./np.pi)*f.variables['grid_center_lon'][:]
@@ -11,5 +12,8 @@
 map.drawcoastlines()
 map.drawmapboundary()
 # tri=True forwards to axes.tripcolor
-map.pcolor(x,y,z,tri=True,shading='faceted')
+#z = ma.masked_where(z < 1.e-5, z) # for testing masked arrays.
+map.pcolor(x,y,z,tri=True,shading='faceted',vmin=0,vmax=3000)
+#map.contourf(x,y,z,np.arange(0,3000,150),tri=True)
+#map.contour(x,y,z,np.arange(0,3000,150),tri=True)
 plt.show()

Modified: trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py
===================================================================
--- trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py 2010-05-23 
12:31:00 UTC (rev 8332)
+++ trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py 2010-05-23 
16:49:22 UTC (rev 8333)
@@ -2757,11 +2757,24 @@
             if tri:
                 # for unstructured grids, toss out points outside
                 # projection limb (don't use those points in triangulation).
+                if hasattr(data,'mask'):
+                    data = data.filled(fill_value=1.e30)
+                    masked=True
+                else:
+                    masked=False
                 mask = np.logical_or(x<1.e20,y<1.e20)
                 x = np.compress(mask,x)
                 y = np.compress(mask,y)
                 data = np.compress(mask,data)
-                ret = ax.tripcolor(x,y,data,**kwargs)
+                if masked:
+                    import matplotlib.tri as tri
+                    triang = tri.Triangulation(x, y)
+                    z = data[triang.triangles]
+                    mask = (z > 1.e20).sum(axis=-1)
+                    triang.set_mask(mask)
+                    ret = ax.tripcolor(triang,data,**kwargs)
+                else:
+                    ret = ax.tripcolor(x,y,data,**kwargs)
             else:
                 # make x,y masked arrays
                 # (masked where data is outside of projection limb)
@@ -2828,11 +2841,26 @@
             ax.hold(h)
         try:
             if kwargs.has_key('tri') and kwargs['tri']:
+                # for unstructured grids, toss out points outside
+                # projection limb (don't use those points in triangulation).
+                if hasattr(data,'mask'):
+                    data = data.filled(fill_value=1.e30)
+                    masked=True
+                else:
+                    masked=False
                 mask = np.logical_or(x<1.e20,y<1.e20)
                 x = np.compress(mask,x)
                 y = np.compress(mask,y)
                 data = np.compress(mask,data)
-                CS = ax.tricontour(x,y,data,*args,**kwargs)
+                if masked:
+                    import matplotlib.tri as tri
+                    triang = tri.Triangulation(x, y)
+                    z = data[triang.triangles]
+                    mask = (z > 1.e20).sum(axis=-1)
+                    triang.set_mask(mask)
+                    CS = ax.tricontour(triang,data,*args,**kwargs)
+                else:
+                    CS = ax.tricontour(x,y,data,*args,**kwargs)
             else:
                 # make sure x is monotonically increasing - if not,
                 # print warning suggesting that the data be shifted in 
longitude
@@ -2894,11 +2922,26 @@
             ax.hold(h)
         try:
             if kwargs.has_key('tri') and kwargs['tri']:
+                # for unstructured grids, toss out points outside
+                # projection limb (don't use those points in triangulation).
+                if hasattr(data,'mask'):
+                    data = data.filled(fill_value=1.e30)
+                    masked=True
+                else:
+                    masked=False
                 mask = np.logical_or(x<1.e20,y<1.e20)
                 x = np.compress(mask,x)
                 y = np.compress(mask,y)
                 data = np.compress(mask,data)
-                CS = ax.tricontourf(x,y,data,*args,**kwargs)
+                if masked:
+                    import matplotlib.tri as tri
+                    triang = tri.Triangulation(x, y)
+                    z = data[triang.triangles]
+                    mask = (z > 1.e20).sum(axis=-1)
+                    triang.set_mask(mask)
+                    CS = ax.tricontourf(triang,data,*args,**kwargs)
+                else:
+                    CS = ax.tricontourf(x,y,data,*args,**kwargs)
             else:
                 # make sure x is monotonically increasing - if not,
                 # print warning suggesting that the data be shifted in 
longitude


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

------------------------------------------------------------------------------

_______________________________________________
Matplotlib-checkins mailing list
Matplotlib-checkins@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to