|
From: <js...@us...> - 2010-05-23 16:49:28
|
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.
|