From: <js...@us...> - 2008-07-23 12:32:50
|
Revision: 5820 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=5820&view=rev Author: jswhit Date: 2008-07-23 12:32:48 +0000 (Wed, 23 Jul 2008) Log Message: ----------- add barbs method, barbs example. Modified Paths: -------------- trunk/toolkits/basemap/MANIFEST.in trunk/toolkits/basemap/examples/README trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py Added Paths: ----------- trunk/toolkits/basemap/examples/barb_demo.py Modified: trunk/toolkits/basemap/MANIFEST.in =================================================================== --- trunk/toolkits/basemap/MANIFEST.in 2008-07-23 03:08:41 UTC (rev 5819) +++ trunk/toolkits/basemap/MANIFEST.in 2008-07-23 12:32:48 UTC (rev 5820) @@ -39,6 +39,7 @@ include examples/contour_demo.py include examples/customticks.py include examples/quiver_demo.py +include examples/barbs_demo.py include examples/nytolondon.py include examples/ortho_demo.py include examples/geos_demo.py Modified: trunk/toolkits/basemap/examples/README =================================================================== --- trunk/toolkits/basemap/examples/README 2008-07-23 03:08:41 UTC (rev 5819) +++ trunk/toolkits/basemap/examples/README 2008-07-23 12:32:48 UTC (rev 5820) @@ -36,6 +36,8 @@ quiver_demo.py shows how to plot wind vectors on a map. +barbs_demo.py shows how to plot wind barbs on a map. + randompoints.py demonstrates the use of scatter to plot randomly distributed points on the earth. Added: trunk/toolkits/basemap/examples/barb_demo.py =================================================================== --- trunk/toolkits/basemap/examples/barb_demo.py (rev 0) +++ trunk/toolkits/basemap/examples/barb_demo.py 2008-07-23 12:32:48 UTC (rev 5820) @@ -0,0 +1,55 @@ +from mpl_toolkits.basemap import Basemap +import numpy as np +import matplotlib.pyplot as plt + +# read in data. +file = open('fcover.dat','r') +ul=[];vl=[];pl=[] +nlons=73; nlats=73 +dellat = 2.5; dellon = 5. +for line in file.readlines(): + l = line.replace('\n','').split() + ul.append(float(l[0])) + vl.append(float(l[1])) + pl.append(float(l[2])) +u = np.reshape(np.array(ul,np.float32),(nlats,nlons)) +v = np.reshape(np.array(vl,np.float32),(nlats,nlons)) +p = np.reshape(np.array(pl,np.float32),(nlats,nlons)) +lats1 = -90.+dellat*np.arange(nlats) +lons1 = -180.+dellon*np.arange(nlons) +lons, lats = np.meshgrid(lons1, lats1) +# convert from mps to knots. +u = 1.944*u; v = 1.944*v + +# plot barbs in map projection coordinates. + +# stereogrpaphic projection. +m = Basemap(width=10000000,height=10000000,lon_0=-90,lat_0=45.,lat_ts=45, + resolution='l',projection='stere') +x,y = m(lons,lats) +# transform from spherical to map projection coordinates (rotation +# and interpolation). +nxv = 25; nyv = 25 +udat, vdat, xv, yv = m.transform_vector(u,v,lons1,lats1,nxv,nyv,returnxy=True) +# create a figure, add an axes. +fig=plt.figure(figsize=(8,8)) +ax = fig.add_axes([0.1,0.1,0.7,0.7]) +# plot color-filled contours over map +levs = np.arange(960,1051,4) +cs1 = m.contour(x,y,p,levs,colors='k',linewidths=0.5) +cs2 = m.contourf(x,y,p,levs) +# plot barbs. +m.barbs(xv,yv,udat,vdat,length=6,barbcolor='k',flagcolor='r',linewidth=0.5) +# plot colorbar for pressure +cax = plt.axes([0.875, 0.1, 0.05, 0.7]) # setup colorbar axes. +plt.colorbar(cax=cax) # draw colorbar +plt.axes(ax) # make the original axes current again +# draw coastlines +m.drawcoastlines() +# draw parallels +m.drawparallels(np.arange(0,81,20),labels=[1,1,0,0]) +# draw meridians +m.drawmeridians(np.arange(-180,0,20),labels=[0,0,0,1]) +plt.title('Surface Wind Barbs and Pressure') +plt.show() + Modified: trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py =================================================================== --- trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py 2008-07-23 03:08:41 UTC (rev 5819) +++ trunk/toolkits/basemap/lib/mpl_toolkits/basemap/__init__.py 2008-07-23 12:32:48 UTC (rev 5820) @@ -2890,6 +2890,44 @@ self.set_axes_limits(ax=ax) return ret + def barbs(self, x, y, u, v, *args, **kwargs): + """ + Make a wind barb plot (u, v) with on the map. + (see matplotlib.pyplot.barbs documentation). + + Extra keyword ``ax`` can be used to override the default axis instance. + + Other \*args and \**kwargs passed on to matplotlib.pyplot.barbs + """ + if not kwargs.has_key('ax') and self.ax is None: + try: + ax = plt.gca() + except: + import matplotlib.pyplot as plt + ax = plt.gca() + elif not kwargs.has_key('ax') and self.ax is not None: + ax = self.ax + else: + ax = kwargs.pop('ax') + # allow callers to override the hold state by passing hold=True|False + b = ax.ishold() + h = kwargs.pop('hold',None) + if h is not None: + ax.hold(h) + try: + ret = ax.barbs(x,y,u,v,*args,**kwargs) + try: + plt.draw_if_interactive() + except: + pass + except: + ax.hold(b) + raise + ax.hold(b) + # set axes limits to fit map region. + self.set_axes_limits(ax=ax) + return ret + def drawlsmask(self,rgba_land,rgba_ocean,lsmask=None, lsmask_lons=None,lsmask_lats=None,lakes=False,**kwargs): """ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |