From: <js...@us...> - 2007-11-30 14:36:46
|
Revision: 4519 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=4519&view=rev Author: jswhit Date: 2007-11-30 06:36:43 -0800 (Fri, 30 Nov 2007) Log Message: ----------- no Float32 anymore Modified Paths: -------------- trunk/toolkits/basemap/examples/pnganim.py trunk/toolkits/basemap/examples/warpimage.py Modified: trunk/toolkits/basemap/examples/pnganim.py =================================================================== --- trunk/toolkits/basemap/examples/pnganim.py 2007-11-30 12:58:57 UTC (rev 4518) +++ trunk/toolkits/basemap/examples/pnganim.py 2007-11-30 14:36:43 UTC (rev 4519) @@ -2,15 +2,13 @@ # as an animation using a tool like imagemagick animate, or # converted to an animate gif (using imagemagick convert). -# requires pydap module. -try: - from dap import client -except: - raise ImportError,"requires pyDAP module (version 2.1 or higher) from http://pydap.org" -import pylab as p -from matplotlib.numerix import ma +# reads data over http - needs an active internet connection. + +import numpy +import pylab +from numpy import ma import datetime, sys, time, subprocess -from matplotlib.toolkits.basemap import Basemap, shiftgrid +from matplotlib.toolkits.basemap import Basemap, shiftgrid, NetCDFFile hrsgregstart = 13865688 # hrs from 00010101 to 15821015 in Julian calendar. # times in many datasets use mixed Gregorian/Julian calendar, datetime @@ -55,19 +53,19 @@ print URLu print URLv try: - data = client.open(URL) - datau = client.open(URLu) - datav = client.open(URLv) + data = NetCDFFile(URL) + datau = NetCDFFile(URLu) + datav = NetCDFFile(URLv) except: raise IOError, 'opendap server not providing the requested data' # read lats,lons,times. -print data.keys() -print datau.keys() -print datav.keys() -latitudes = data['lat'][:] -longitudes = data['lon'][:].tolist() -times = data['time'][:] +print data.variables.keys() +print datau.variables.keys() +print datav.variables.keys() +latitudes = data.variables['lat'][:] +longitudes = data.variables['lon'][:].tolist() +times = data.variables['time'][:] # put times in YYYYMMDDHH format. dates=[] for t in times: @@ -83,49 +81,49 @@ if ntime1 >= ntime2: raise ValueError,'date2 must be greater than date1' # get sea level pressure and 10-m wind data. -slpdata = data['presmsl'] -udata = datau['ugrdprs'] -vdata = datau['vgrdprs'] +slpdata = data.variables['presmsl'] +udata = datau.variables['ugrdprs'] +vdata = datau.variables['vgrdprs'] # mult slp by 0.01 to put in units of millibars. -slpin = 0.01*p.squeeze(slpdata[ntime1:ntime2+1,:,:]) -uin = p.squeeze(udata[ntime1:ntime2+1,0,:,:]) -vin = p.squeeze(vdata[ntime1:ntime2+1,0,:,:]) +slpin = 0.01*slpdata[ntime1:ntime2+1,:,:] +uin = udata[ntime1:ntime2+1,0,:,:] +vin = vdata[ntime1:ntime2+1,0,:,:] datelabels = dates[ntime1:ntime2+1] # add cyclic points -slp = p.zeros((slpin.shape[0],slpin.shape[1],slpin.shape[2]+1),p.Float64) +slp = numpy.zeros((slpin.shape[0],slpin.shape[1],slpin.shape[2]+1),numpy.float64) slp[:,:,0:-1] = slpin; slp[:,:,-1] = slpin[:,:,0] -u = p.zeros((uin.shape[0],uin.shape[1],uin.shape[2]+1),p.Float64) +u = numpy.zeros((uin.shape[0],uin.shape[1],uin.shape[2]+1),numpy.float64) u[:,:,0:-1] = uin; u[:,:,-1] = uin[:,:,0] -v = p.zeros((vin.shape[0],vin.shape[1],vin.shape[2]+1),p.Float64) +v = numpy.zeros((vin.shape[0],vin.shape[1],vin.shape[2]+1),numpy.float64) v[:,:,0:-1] = vin; v[:,:,-1] = vin[:,:,0] -longitudes.append(360.); longitudes = p.array(longitudes) +longitudes.append(360.); longitudes = numpy.array(longitudes) # make 2-d grid of lons, lats -lons, lats = p.meshgrid(longitudes,latitudes) +lons, lats = numpy.meshgrid(longitudes,latitudes) print 'min/max slp,u,v' -print min(p.ravel(slp)),max(p.ravel(slp)) -print min(p.ravel(uin)),max(p.ravel(uin)) -print min(p.ravel(vin)),max(p.ravel(vin)) +print slp.min(), slp.max() +print uin.min(), uin.max() +print vin.min(), vin.max() print 'dates' print datelabels -# make orthographic basemap. +# make orthographic basemapylab. m = Basemap(resolution='c',projection='ortho',lat_0=60.,lon_0=-60.) -p.ion() # interactive mode on. -uin = p.squeeze(udata[ntime1:ntime2+1,0,:,:]) -vin = p.squeeze(vdata[ntime1:ntime2+1,0,:,:]) +pylab.ion() # interactive mode on. +uin = udata[ntime1:ntime2+1,0,:,:] +vin = vdata[ntime1:ntime2+1,0,:,:] datelabels = dates[ntime1:ntime2+1] -# make orthographic basemap. +# make orthographic basemapylab. m = Basemap(resolution='c',projection='ortho',lat_0=60.,lon_0=-60.) -p.ion() # interactive mode on. +pylab.ion() # interactive mode on. # create figure, add axes (leaving room for colorbar on right) -fig = p.figure() +fig = pylab.figure() ax = fig.add_axes([0.1,0.1,0.7,0.7]) # set desired contour levels. -clevs = p.arange(960,1061,5) +clevs = numpy.arange(960,1061,5) # compute native x,y coordinates of grid. x, y = m(lons, lats) # define parallels and meridians to draw. -parallels = p.arange(-80.,90,20.) -meridians = p.arange(0.,360.,20.) +parallels = numpy.arange(-80.,90,20.) +meridians = numpy.arange(0.,360.,20.) # number of repeated frames at beginning and end is n1. nframe = 0; n1 = 10 l,b,w,h=ax.get_position() @@ -133,42 +131,42 @@ # parallels, meridians and title. for nt,date in enumerate(datelabels[1:]): CS = m.contour(x,y,slp[nt,:,:],clevs,linewidths=0.5,colors='k',animated=True) - CS = m.contourf(x,y,slp[nt,:,:],clevs,cmap=p.cm.RdBu_r,animated=True) + CS = m.contourf(x,y,slp[nt,:,:],clevs,cmap=pylab.cm.RdBu_r,animated=True) # plot wind vectors on lat/lon grid. # rotate wind vectors to map projection coordinates. #urot,vrot = m.rotate_vector(u[nt,:,:],v[nt,:,:],lons,lats) - # plot wind vectors over map. + # plot wind vectors over mapylab. #Q = m.quiver(x,y,urot,vrot,scale=500) # plot wind vectors on projection grid (looks better). # first, shift grid so it goes from -180 to 180 (instead of 0 to 360 - # in longitude). Otherwise, interpolation is messed up. + # in longitude). Otherwise, interpolation is messed upylab. ugrid,newlons = shiftgrid(180.,u[nt,:,:],longitudes,start=False) vgrid,newlons = shiftgrid(180.,v[nt,:,:],longitudes,start=False) # transform vectors to projection grid. urot,vrot,xx,yy = m.transform_vector(ugrid,vgrid,newlons,latitudes,51,51,returnxy=True,masked=True) - # plot wind vectors over map. + # plot wind vectors over mapylab. Q = m.quiver(xx,yy,urot,vrot,scale=500) # make quiver key. - qk = p.quiverkey(Q, 0.1, 0.1, 20, '20 m/s', labelpos='W') + qk = pylab.quiverkey(Q, 0.1, 0.1, 20, '20 m/s', labelpos='W') # draw coastlines, parallels, meridians, title. m.drawcoastlines(linewidth=1.5) m.drawparallels(parallels) m.drawmeridians(meridians) - p.title('SLP and Wind Vectors '+date) + pylab.title('SLP and Wind Vectors '+date) if nt == 0: # plot colorbar on a separate axes (only for first frame) - cax = p.axes([l+w-0.05, b, 0.03, h]) # setup colorbar axes + cax = pylab.axes([l+w-0.05, b, 0.03, h]) # setup colorbar axes fig.colorbar(CS,drawedges=True, cax=cax) # draw colorbar cax.text(0.0,-0.05,'mb') - p.axes(ax) # reset current axes - p.draw() # draw the plot + pylab.axes(ax) # reset current axes + pylab.draw() # draw the plot # save first and last frame n1 times # (so gif animation pauses at beginning and end) if nframe == 0 or nt == slp.shape[0]-1: for n in range(n1): - p.savefig('anim%03i'%nframe+'.png') + pylab.savefig('anim%03i'%nframe+'.png') nframe = nframe + 1 else: - p.savefig('anim%03i'%nframe+'.png') + pylab.savefig('anim%03i'%nframe+'.png') nframe = nframe + 1 ax.clear() # clear the axes for the next plot. Modified: trunk/toolkits/basemap/examples/warpimage.py =================================================================== --- trunk/toolkits/basemap/examples/warpimage.py 2007-11-30 12:58:57 UTC (rev 4518) +++ trunk/toolkits/basemap/examples/warpimage.py 2007-11-30 14:36:43 UTC (rev 4519) @@ -1,6 +1,7 @@ import pylab as P +import numpy from matplotlib.toolkits.basemap import Basemap -from matplotlib.numerix import ma +from numpy import ma from matplotlib.image import pil_to_array from PIL import Image @@ -10,13 +11,13 @@ # read in jpeg image to rgba array of normalized floats. pilImage = Image.open('land_shallow_topo_2048.jpg') rgba = pil_to_array(pilImage) -rgba = rgba.astype(P.Float32)/255. # convert to normalized floats. +rgba = rgba.astype(numpy.float32)/255. # convert to normalized floats. # define lat/lon grid that image spans (projection='cyl'). nlons = rgba.shape[1]; nlats = rgba.shape[0] delta = 360./float(nlons) -lons = P.arange(-180.+0.5*delta,180.,delta) -lats = P.arange(-90.+0.5*delta,90.,delta) +lons = numpy.arange(-180.+0.5*delta,180.,delta) +lats = numpy.arange(-90.+0.5*delta,90.,delta) # create new figure fig=P.figure() @@ -27,8 +28,8 @@ # draw coastlines. m.drawcoastlines(linewidth=0.5,color='0.5') # draw lat/lon grid lines. -m.drawmeridians(P.arange(-180,180,60),labels=[0,0,0,1],color='0.5') -m.drawparallels(P.arange(-90,90,30),labels=[1,0,0,0],color='0.5') +m.drawmeridians(numpy.arange(-180,180,60),labels=[0,0,0,1],color='0.5') +m.drawparallels(numpy.arange(-90,90,30),labels=[1,0,0,0],color='0.5') P.title("Blue Marble image - native 'cyl' projection",fontsize=12) print 'plot cylindrical map (no warping needed) ...' @@ -38,9 +39,9 @@ m = Basemap(projection='ortho',lat_0=40,lon_0=40,resolution='l') # transform to nx x ny regularly spaced native projection grid # nx and ny chosen to have roughly the same horizontal res as original image. -dx = 2.*P.pi*m.rmajor/float(nlons) +dx = 2.*numpy.pi*m.rmajor/float(nlons) nx = int((m.xmax-m.xmin)/dx)+1; ny = int((m.ymax-m.ymin)/dx)+1 -rgba_warped = ma.zeros((ny,nx,4),P.Float64) +rgba_warped = ma.zeros((ny,nx,4),numpy.float64) # interpolate rgba values from proj='cyl' (geographic coords) to 'lcc' # values outside of projection limb will be masked. for k in range(4): @@ -52,8 +53,8 @@ # draw coastlines. m.drawcoastlines(linewidth=0.5,color='0.5') # draw lat/lon grid lines every 30 degrees. -m.drawmeridians(P.arange(0,360,30),color='0.5') -m.drawparallels(P.arange(-90,90,30),color='0.5') +m.drawmeridians(numpy.arange(0,360,30),color='0.5') +m.drawparallels(numpy.arange(-90,90,30),color='0.5') P.title("Blue Marble image warped from 'cyl' to 'ortho' projection",fontsize=12) print 'warp to orthographic map ...' @@ -67,7 +68,7 @@ # nx and ny chosen to have roughly the same horizontal res as original image. dx = 2.*P.pi*m.rmajor/float(nlons) nx = int((m.xmax-m.xmin)/dx)+1; ny = int((m.ymax-m.ymin)/dx)+1 -rgba_warped = P.zeros((ny,nx,4),P.Float64) +rgba_warped = numpy.zeros((ny,nx,4),numpy.float64) # interpolate rgba values from proj='cyl' (geographic coords) to 'lcc' for k in range(4): rgba_warped[:,:,k] = m.transform_scalar(rgba[:,:,k],lons,lats,nx,ny) @@ -77,9 +78,9 @@ m.drawcoastlines(linewidth=0.5,color='0.5') # draw parallels and meridians. # label on left, right and bottom of map. -parallels = P.arange(0.,80,20.) +parallels = numpy.arange(0.,80,20.) m.drawparallels(parallels,labels=[1,1,0,1],color='0.5') -meridians = P.arange(10.,360.,30.) +meridians = numpy.arange(10.,360.,30.) m.drawmeridians(meridians,labels=[1,1,0,1],color='0.5') P.title("Blue Marble image warped from 'cyl' to 'lcc' projection",fontsize=12) print 'warp to lambert conformal map ...' This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |