Evan Mason wrote:
> In the mpl basemap 'test.py' script, I want to add some contours to 
> the mercator projection map (test #3).  Just below line 83 (ie, below 
> the 'im  = imshow..' command I added the line:
>
> m.contour(topodat,[-1000, -2000])
>
> This returns:
>
> /home/evan/downloads/basemap-0.9.4/examples/test.py
>      82 # plot image over map.
>      83 im = m.imshow(topodat,cm.jet)
> ---> 84 m.contour(topodat,[-1000, -2000])
>      85 m.drawcoastlines ()
>      86 m.drawcountries()
>
> TypeError: contour() takes at least 4 arguments (3 given)
> WARNING: Failure executing file: <test.py>
>
> I understand the error to mean that I haven't supplied x and y values; 
> however at this point, if I close all the open figures and enter the 
> line 'contour(topodat,[-1000, -2000])' at the ipython command, it 
> gives me the plot I want.
>
> I've then tried to use meshgrid to make x and y values (see code 
> below); this is error free but the contours don't appear.  Again, 
> using contour in the command line I get the plot I want.  Is it not 
> possible to plot on top of imshow?
>
> Any help appreciated.
>
>
> Thanks, Evan
>
>
>
>
> from matplotlib.toolkits.basemap import Basemap, shiftgrid
> from scipy import interpolate as Pinterp
> from pylab import *
> import matplotlib.colors as colors
>
> def doSpline(yVec, newLatRange):
>     latRange    = range(len(yVec))
>     newLatRange = linspace(latRange[0], latRange[-1], newLatRange)
>     tck         = Pinterp.splrep(latRange, yVec)
>     yVec        = Pinterp.splev(newLatRange, tck)
>     return yVec
>
> topodatin = load('etopo20data.gz')
> lonsin = load('etopo20lons.gz')
> latsin = load('etopo20lats.gz')
> # shift data so lons go from -180 to 180 instead of 20 to 380.
> topoin,lons = shiftgrid(180.,topodatin,lonsin,start=False)
> lats = latsin
> # transform to nx x ny regularly spaced native projection grid
> nx = len(lons)
> ny = int(80.*len(lats)/90.)
> lats_ny = doSpline(lats, ny)
>
> lons_mesh, lats_mesh = meshgrid(lons, lats_ny)
>
> # setup mercator map projection (-80 to +80).
> m = Basemap(llcrnrlon=-180.,llcrnrlat=-80,urcrnrlon=180.,urcrnrlat=80.,\
>             resolution='c',area_thresh=10000.,projection='merc',\
>             lon_0=0.5*(lons[0]+lons[-1]),lat_ts=20.)
>
> topodat = m.transform_scalar(topoin,lons,lats,nx,ny)
>
> # setup figure with same aspect ratio as map.
> fig=figure()
> fig.add_axes([0.1,0.1,0.75,0.75])
> # plot image over map.
> im = m.imshow(topodat,cm.jet)
> # PLOT CONTOURS
> m.contour(lons_mesh, lats_mesh, topodat,[-1000, -2000, -3000])
> show()
>

Evan:  This works for me:

from matplotlib.toolkits.basemap import Basemap, shiftgrid
from pylab import *

topodatin = load('etopo20data.gz')
lonsin = load('etopo20lons.gz')
latsin = load('etopo20lats.gz')
# shift data so lons go from -180 to 180 instead of 20 to 380.
topoin,lons = shiftgrid(180.,topodatin,lonsin,start=False)
lats = latsin

# setup mercator map projection (-80 to +80).
m = Basemap(llcrnrlon=-180.,llcrnrlat=-80,urcrnrlon=180.,urcrnrlat=80.,\
            resolution='c',area_thresh=10000.,projection='merc',\
            lon_0=0.5*(lons[0]+lons[-1]),lat_ts=20.)

# transform to nx x ny regularly spaced native projection grid
nx = len(lons); ny = len(lats)
topodat = m.transform_scalar(topoin,lons,lats,nx,ny)

# setup figure with same aspect ratio as map.
# plot image over map.
im = m.imshow(topodat,cm.jet)
# PLOT CONTOURS
longrid,latgrid = meshgrid(lons,lats)
x, y  = m(longrid,latgrid)
# reverse sign of data, so contours won't be dashed.
cs = m.contour(x, y, -topoin, [1000, 2000], colors='r')
m.drawcoastlines()
show()


Unlike the pylab contour command, the basemap contour method requires 
you to supply the X and Y values.

-Jeff

-- 
Jeffrey S. Whitaker         Phone : (303)497-6313
NOAA/OAR/CDC  R/PSD1        FAX   : (303)497-6449
325 Broadway                Boulder, CO, USA 80305-3328


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Matplotlib-users mailing list
Matplotlib-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-users

Reply via email to