Thanks Jeff, that does what I want. It seems to be efficient, as long as you don't try to plot 10.000+ values on a small map (results in a colored rectangle anyway...). After thinning out my data
data = data.compress(maskX, axis=1) data = data.compress(maskY, axis=0) it seems to be only a little bit slower than contour / contourf. Simon Jeff Whitaker schrieb: > 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 > import random > 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 > > > ------------------------------------------------------------------------ > ------------------------------------------------------------------------- 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