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