#!/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
['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)
#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()
_______________________________________________ Python-es mailing list Pyth...@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/
Thank you for your ideas, I leave the correct code to plot trajectories of any object, in my case I have drawn the trajectories of convective storms.
# --- Construimos el mapa ---
import numpy as npfrom mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as pltfrom PIL import *fig = plt.figure(figsize=(12,12))ax = fig.add_axes([0.1,0.1,0.8,0.8])
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)
# --- Dibujamos paralelos y meridianos ---m.drawparallels(np.arange(10.,35.,5.),labels=[1,0,0,1])m.drawmeridians(np.arange(-120.,-80.,5.),labels=[1,0,0,1])m.drawmapboundary(fill_color='aqua')# --- Abrimos el archivo que contiene los datos ---import pandas as pddf = pd.read_csv('scm-2004.csv')for evento, group in df.groupby(['evento']):latitude = group.lat.valueslongitude = group.lon.valuesx,y = m(longitude, latitude)plt.plot(x,y,'y-',linewidth=2 )plt.xlabel('Longitud')plt.ylabel('Latitud')plt.title('Trayectorias de Sistemas Convectivos 2004')plt.savefig('track-2004.jpg', dpi=100)
With the above code, I get
the desired figure. 60
paths drawn on
the map of México.