#! /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']]

with the above code I get an array whose columns represent: [Lat, Lon, Date, Identifier, Temperatures, Category]. Now, I will put a code that allows me to plot the first and second column on the map of Mexico:

#!/usr/bin/python
#Proyecto Tormenta: Graficar Trayectorias de Sistemas Convectivos
#Importamos librerias 

import numpy as np
from mpl_toolkits.basemap import Basemap
import  matplotlib.pyplot as pl

#Graficamos un mapa para 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)

#Dibujamos paralelos y meridianos

m.drawparallels(np.arange(10.,35.,5.))
m.drawmeridians(np.arange(-120.,-80.,10.))
m.drawmapboundary(fill_color='aqua')

#Abrimos el archivo que contiene los datos

data = np.loadtxt('path-tracks.csv', dtype=np.str,delimiter=',',skiprows=1)
latitude = data[:,0]
longitude = data[:,1] 

#Convertimos latitude y longitude en coordenadas X y Y del mapa

x,y = m(longitude, latitude)

#Graficamos los puntos sobre el mapa

pl.plot(x,y,'ro-')
pl.show()

with this I get the following figure

 ![scm04](/attachments/large/4/scm04.png "scm04") 

The points plotted on the map, corresponding to three different paths. Mi final idea is to draw a line connecting the points associated with each path, How I can do this?

is posible draw an identifier or a mark for each path?

Recommended Answers

All 2 Replies

You could plot each line in a different color and then in the legend, indicate some distinguishing attribute of each line.

This question is probably better suited for the matplotlib mailinglist/forum, as you're more likely to find people who are familiar with the package.

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 np
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from 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 pd

df = pd.read_csv('scm-2004.csv')
for evento, group in df.groupby(['evento']):
    latitude = group.lat.values
    longitude = group.lon.values
    x,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 attachment figure.

I have only one last question: how could indicate the start of each of the storms, someone has an idea how I can do this?

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.