Simon Kammerer wrote:
> Hi list,
>
> what's the best (meaning most efficient/fastest) way to plot grid 
> point values on a map created with basemap?
>
> I'd like to plot the raw values of my data-array to the correspondig 
> gridpoints, instead of having it transformed to something like contour 
> or contourf. The ne plus ultra would be the ability to assing a 
> colormap, to control the font color of the plotted values...
>
> Regards
> Simon
>
>   

Simon:  I don't know about efficiency, but this does what you want:

from pylab import show, title, arange, figure, title, arccos, pi, cm, 
text, sqrt
from matplotlib.colors import rgb2hex
from matplotlib.toolkits.basemap import Basemap
from matplotlib.numerix.random_array import uniform

# Plot a bunch of randomly distributed points on the earth.

# set up stereographic map centered on N. Pole.
m = Basemap(lon_0=-105,boundinglat=30.,resolution='l',
          area_thresh=10000.,projection='npstere')
# number of points to plot.
npts = 300
# generate random points on a sphere,
# so that every small area on the sphere is expected
# to have the same number of points.
# http://mathworld.wolfram.com/SpherePointPicking.html
try: # this works for numpy
  u = uniform(0.,1.,size=npts)
  v = uniform(0.,1.,size=npts)
  z = uniform(0,100,size=npts)
except: # this works for Numeric/numarray
  u = uniform(0.,1.,shape=npts)
  v = uniform(0.,1.,shape=npts)
  z = uniform(0,100,shape=npts)
lons = 360.*u
lats = (180./pi)*arccos(2*v-1) - 90.
# transform lons and lats to map coordinates.
x,y = m(lons,lats)
# create a list of strings containing z values
zn = [ '%2i' % zz for zz in z ]
# plot numbers on map, colored by value.
vmin = 0; vmax = 100
cmap = cm.jet # use 'jet' colormap
for name,zval,xpt,ypt in zip(zn,z,x,y):
  # only plot values inside map region.
  if xpt > m.xmin and xpt < m.xmax and ypt > m.ymin and ypt < m.ymax:
      rgbcolor = cmap(1.-(zval-vmin)/(vmax-vmin))[:3]
      hexcolor = rgb2hex(rgbcolor)
      text(xpt,ypt,name,fontsize=9,weight='bold',color=hexcolor)
# draw coasts and fill continents.
m.drawcoastlines(linewidth=0.5)
m.fillcontinents()
# draw parallels and meridians.
delat = 20.
circles = arange(0.,90.,delat).tolist()+\
        arange(-delat,-90,-delat).tolist()
m.drawparallels(circles)
delon = 45.
meridians = arange(0,360,delon)
m.drawmeridians(meridians,labels=[1,1,1,1])
title('Random Data Value at Random Points',y=1.075)
show()


HTH,

-Jeff

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

S

-------------------------------------------------------------------------
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