plot-Bahnen auf einer Karte mit Grundkarte
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']]
mit dem obigen code erhalte ich ein array, dessen Spalten repräsentieren: [Lat, Lon, Datum, Kennung, Temperaturen, Kategorie]. Jetzt will ich einen code, der mir erlaubt, plot der ersten und zweiten Spalte auf der Karte von Mexiko:
#!/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 longitude to coordinates X and Y
x, y = m(longitude, latitude)
#Plot the points on the map
pl.plot(x,y,'ro-')
pl.show()
Die Punkte eingezeichnet auf der Karte, entsprechend drei unterschiedliche Wege. Mi Letzte Idee ist, ziehen Sie eine Linie verbindet die Punkte, die mit jedem Pfad, Wie kann ich das machen?
ist posible zeichnen ein Bezeichner oder ein Zeichen für jeden Pfad?
wie kann ich die Größe der Figur, so dass es unterscheiden kann, die Trennung zwischen den Punkten?
- Könnte so etwas wie "große Kreise" sein, was du suchst? siehe dieses tutorial
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Größe der Abbildung kann eingestellt werden, indem einfach ein
figure
vor dem AufrufBasemap
. Ich habe verwendet, Pandas zum Lesen der CSV-denn es ermöglicht die einfache Gruppierung (pro Pfad). Wenn Sie nicht wollen, zu verwenden Pandas kann man wohl das gleiche Ergebnis durch Iteration übernp.unique('cat')
oder so etwas. Wenn Sie diedatetime
als der index, in pandas Ihre Punkte automatisch sortiert werden, indem Sie Zeit in den Fall Ihre CSV-Datei ist unsortiert.Ich bin mir nicht sicher, was du meinst, durch ziehen eines Bezeichners. Die Legende macht es möglich, zu unterscheiden, zwischen Pfaden, aber man könnte auch eine Darstellung der
'Cat'
auf der Karte am Anfang oder Ende einer Zeile zum Beispiel.Ihre Karte Eigenschaften machen es ein wenig 'Auszoomen' für solch kleine Pfade. Mit
ax = pl.gca()
undax.set_xlim()
können Sie eine boundingbox in der mapcoordinates. Das kann man ableiten aus der max-und min-Koordinaten in deine Wege + etwas Puffer.Danke für Eure Ideen, ich lasse den richtigen code für die plot-Trajektorien von jedem Objekt, in meinem Fall habe ich gezeichnet habe, die Flugbahnen von konvektiven stürmen.
--- Dibujamos paralelos y meridianos ---
--- Abrimos el archivo que enthält die Tracklist los datos ---
Mit dem obigen code erhalte ich die gewünschte Abbildung: 60 Pfade, die gezeichnet auf der Karte von Mexiko.
Ich habe nur eine Letzte Frage: wie könnte auf den start von jedem der Stürme, hat jemand eine Idee, wie ich dies tun kann?
Als ich ihm sagte, zu schreiben "Longitud" in der X-Achse (xlabel = 'Breitengrad') überschreibt das Wort auf die Werte der Länge, Wie kann ich schreiben Sie das Wort unten latitude Werte?