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

Reply via email to