|
From: Jeff W. <js...@fa...> - 2009-11-02 15:53:00
|
Stephane Raynaud wrote: > Ross, > > > one way is to mask (or remove) ocean points using the _geoslib module > provided with basemap. > When you create a Basemap instance, you can retrieve all its polygons > land (continents and islands) with "mymap.coastpolygons". > Thay are stored as numpy arrays, and you can convert them to > _geoslib.Polygon objects : > > poly = _geoslib.Polygon(N.asarray(coastalpoly).T) > > Then you loop over all Polygons and all (x,y) points and test : > > good_point = _geoslib.Point((x,y)).within(poly) > > Thanks to this method, you can choose you optimal resolution. > You can even compute the intersection of you hexagons with coastal > polygons using .intersection() and .area (instead of simply checking > if the center is inside) and then reject points depending the fraction > of the cell covered by land (or ocean). Following Stephane's excellent suggestion, here's a prototype Basemap method that checks to see if a point is on land or over water. Ross - if you find it useful I'll include it in the next release. Note that it will be slow for lots of points or large map regions. -Jeff > > On Mon, Nov 2, 2009 at 8:07 AM, <Ros...@ga... > <mailto:Ros...@ga...>> wrote: > > Listers, > > I'm using basemap to plot randomly sampled values (x,y,z) through > hexbin. This produces a very nice result. Some sample code is: > ---------- > import numpy as np > from numpy.random import seed > import matplotlib.pyplot as plt > from mpl_toolkits.basemap import Basemap > from matplotlib.mlab import griddata > > ll_lat = -38.39477 # extent of area of interest > ll_lon = 144.54767 > ur_lat = -37.51642 > ur_lon = 145.67144 > > num_points = 100 # sample points > > # create random sampling over the area of interest > seed(0) > data = np.ones((3, num_points)) > data[0,:] *= ll_lon + np.random.random((num_points))*(ur_lon-ll_lon) > data[1,:] *= ll_lat + np.random.random((num_points))*(ur_lat-ll_lat) > data[2,:] *= np.random.random((num_points))*10000 > > # plot the data > fig = plt.figure() > ax = fig.add_subplot(111) > m = Basemap(projection='cyl', llcrnrlat=ll_lat, urcrnrlat=ur_lat, > llcrnrlon=ll_lon, urcrnrlon=ur_lon, resolution='f', > suppress_ticks=False, area_thresh=0.5) > plt.hexbin(data[0,:], data[1,:], data[2,:], zorder=3) > m.fillcontinents(color=(0.8,0.8,0.8,0), zorder=1) > m.drawcoastlines(linewidth=0.25, color='k', zorder=2) > plt.show() > ---------- > > This contrived example shows a sparse set of hexagons on both land > and ocean. I would like the hexagons over the ocean to be hidden. > I can make the ones on land disappear by changing the 'zorder' > parameter of .hexbin() to 0. However I have found no way of doing > the inverse and hiding hexagons over the ocean. > > Using drawlsmask() is too crude at a 5-minute resolution. > > Any ideas? > > Thanks, > Ross > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. > Jumpstart your > developing skills, take BlackBerry mobile applications to market > and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > <mailto:Mat...@li...> > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > > > > > -- > Stephane Raynaud > ------------------------------------------------------------------------ > > ------------------------------------------------------------------------------ > Come build with us! The BlackBerry(R) Developer Conference in SF, CA > is the only developer event you need to attend this year. Jumpstart your > developing skills, take BlackBerry mobile applications to market and stay > ahead of the curve. Join us from November 9 - 12, 2009. Register now! > http://p.sf.net/sfu/devconference > ------------------------------------------------------------------------ > > _______________________________________________ > Matplotlib-users mailing list > Mat...@li... > https://lists.sourceforge.net/lists/listinfo/matplotlib-users > -- Jeffrey S. Whitaker Phone : (303)497-6313 Meteorologist FAX : (303)497-6449 NOAA/OAR/PSD R/PSD1 Email : Jef...@no... 325 Broadway Office : Skaggs Research Cntr 1D-113 Boulder, CO, USA 80303-3328 Web : http://tinyurl.com/5telg |