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

Juan Luis Cano juanlu001 en gmail.com
Mar Ene 29 08:49:15 CET 2013


On 01/29/2013 07:56 AM, Boris Vladimir Comi wrote:
> #! /usr/bin/python
>     import numpy as np
>     data = 
> np.loadtxt('path-tracks.csv',dtype=np.str,delimiter=',',skiprows=1)
>     print data
>
>  [['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']]
>
> Con el codigo de arriba, obtengo un arreglo cuyas columnas 
> representan: [Lat, Lon, Date, Identifier, Temperatures, Category]. 
> Ahora, con el codigo de abajo ploteo la primera y segunda columna 
> sobre un mapa de México:
>
>
>
>     #!/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
>
>     data = np.loadtxt('path-tracks.csv', dtype=np.str,delimiter=' , ', 
> skiprows=1)
>     latitude = data[:,0]
>     longitude = data[:,1]
>
>     #Convert latitude and longitudeto coordinates X and Y
>
>     x, y = m(longitude, latitude)
>
>     #Plot the points on the map
>
>     pl.plot(x,y,'ro-')
>     pl.show()
>
>
>
> Los puntos graficados en el mapa, corresponden a tres diferentes 
> trayectorias con una linea que conecta todos los puntos. MI idea es 
> dibujar una linea que conecte los puntos asociados a cada trayectoria, 
> como puedo lograr esto? o como debo estructurar mis datos para plotear 
> las diferentes trayectorias?
>
> es posible dibujar un identificador o una marca que me represente cada 
> trayectoria?
>
> como puedo configuar el tamaño de la figura para que pueda tener una 
> mejor vista de las trayectorias?
>
>
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/

Si reúnes en las variables x e y los valores de las tres trayectorias, 
naturalmente se mezclarán las tres en la representación. En primer lugar 
deberías separar las tres: tres variables latitude y tres variables 
longitude. ¿Por tus datos entiendo que la última columna es la que 
diferencia las tres?

lat_ccm = data[data[:, -1] == 'CCM', 0]
lon_ccm = data[data[:, -1] == 'CCM', 1]
lat_scme = data[data[:, -1] == 'SCME', 0]
lon_scme = data[data[:, -1] == 'SCME', 1]
lat_scm = data[data[:, -1] == 'SCM', 0]
lon_scm = data[data[:, -1] == 'SCM', 1]
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20130129/716e949a/attachment.html>


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