[Python-es] Dibujar trayectorias sobre un mapa usando matplotlib-basemap

Kiko kikocorreoso en gmail.com
Mar Ene 29 08:48:40 CET 2013


>
>     #!/usr/bin/python
>     #Project Storm: Plot trajectories of convective systems
>     #import libraries
>
>     import numpy as np
>     from mpl_toolkits.basemap import Basemap
>     import  matplotlib.pyplot as pl
>
>     # Plot a map for Mexico
>
>     m = Basemap(projection='cyl', llcrnrlat=12,
> urcrnrlat=35,llcrnrlon=-120, urcrnrlon=-80, resolution='c',
> area_thresh=1000.)
>     m.bluemarble()
>     m.drawcoastlines(linewidth=0.5)
>     m.drawcountries(linewidth=0.5)
>     m.drawstates(linewidth=0.5)
>
>     #Draw parallels and meridians
>
>     m.drawparallels(np.arange(10.,35.,5.))
>     m.drawmeridians(np.arange(-120.,-80.,10.))
>     m.drawmapboundary(fill_color='aqua')
>
>     #Open file whit numpy
>
>
El código anterior es lo que quieres. A partir de aquí usaría:

data = np.array([['19.70','-95.20','2/5/04 6:45 AM','1','-38','CCM'],

['19.70','-94.70','2/5/04 7:45 AM','1','-48','CCM'],

['19.30','-93.90','2/5/04 8:45 AM','1','-60','CCM'],

['19.00','-93.50','2/5/04 9:45 AM','1','-58','CCM'],

['19.00','-92.80','2/5/04 10:45 AM','1','-50','CCM'],

['19.20','-92.60','2/5/04 11:45 AM','1','-40','CCM'],

['19.90','-93.00','2/5/04 12:45 PM','1','-43','CCM'],

['20.00','-92.80','2/5/04 1:15 PM','1','-32','CCM'],

['23.10','-100.20','30/5/04 4:45 AM','2','-45','SCME'],

['23.20','-100.00','30/5/04 5:45 AM','2','-56','SCME'],

['23.30','-100.00','30/5/04 6:45 AM','2','-48','SCME'],

['23.30','-100.20','30/5/04 7:45 AM','2','-32','SCME'],

['23.40','-99.00','31/5/04 3:15 AM','3','-36','SCM'],

['23.50','-98.90','31/5/04 4:15 AM','3','-46','SCM'],

['23.60','-98.70','31/5/04 5:15 AM','3','-68','SCM'],

['23.70','-98.80','31/5/04 6:15 AM','3','-30','SCM']])

 latitude = data[:,0].astype(np.float)

longitude = data[:,1].astype(np.float)


## x, y no te hacen falta para nada en este contexto


#Plot the points on the map, puedes usar un for. En este caso son solo tres
casos y lo pongo explícito.


pl.plot(longitude[data[:,3] == '1'], latitude[data[:,3] == '1'],'ro-') # El
primer ¿sistema convectivo de mesoescala?

pl.plot(longitude[data[:,3] == '2'], latitude[data[:,3] == '2'],'yo-') # el
segundo

pl.plot(longitude[data[:,3] == '3'], latitude[data[:,3] == '3'],'go-') # y
el tercero

pl.show()

Para el tema de tamaños de figura y etiquetas en la trayectoria puedes
echarle un ojo a:
http://pybonacci.wordpress.com/tag/tutorial-matplotlib-pyplot/

Si solo te interesa ver la zona de México donde suceden las tormentas,
acótalo en:
m = Basemap(projection='cyl', llcrnrlat=12, urcrnrlat=35,llcrnrlon=-120,
urcrnrlon=-80, resolution='c', area_thresh=1000.)

Saludos.
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20130129/f182c423/attachment.html>


Más información sobre la lista de distribución Python-es