2016-07-18 11 views
1

eine harte Zeit zur Fehlerbehebung dieses Problem zu haben:Multiple greatcircle Plots mit Python basemap

mehrere greatcircle Pfade von Array Plotten

Fehlermeldung:

Traceback (most recent call last): File "example.py", line 41, in eq_map.drawgreatcircle(y,x,y2,x2,linewidth=6,color='b') File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/mpl_toolkits/basemap/init.py", line 2893, in drawgreatcircle npoints = int((dist+0.5*1000.*del_s)/(1000.*del_s)) TypeError: can only concatenate list (not "float") to list


Python-Code:

import csv 

# Open the data file. 
filename = 'sample.csv' 

# Create empty lists for the latitudes and longitudes. 
lats, lons = [], [] 
lats2, lons2 = [], [] 

# Read through the entire file, skip the first line, 
# and pull out just the lats and lons. 
with open(filename) as f: 
    # Create a csv reader object. 
    reader = csv.reader(f) 

    # Ignore the header row. 
    next(reader) 

    # Store the latitudes and longitudes in the appropriate lists. 
    for row in reader: 
     lats.append(float(row[1])) 
     lons.append(float(row[2])) 
     lats2.append(float(row[4])) 
     lons2.append(float(row[5]))   

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

eq_map = Basemap(projection='merc',llcrnrlat=-80,urcrnrlat=80,llcrnrlon=-180,urcrnrlon=180,lat_ts=20,resolution='c') 

eq_map.drawcoastlines() 
eq_map.drawcountries() 
eq_map.fillcontinents(color = 'gray') 
eq_map.drawmapboundary() 
eq_map.drawmeridians(np.arange(0, 360, 30)) 
eq_map.drawparallels(np.arange(-90, 90, 30)) 

x,y = eq_map(lons, lats) 
x2,y2 = eq_map(lons2,lats2) 
eq_map.drawgreatcircle(y,x,y2,x2,linewidth=6,color='b') 

plt.show() 

sample.csv

Origin,origLat,origLon,Dest,destLat,destLon 
"jfk",40.641311,-73.778139,"lax",33.941589,-118.40853 
"teb",40.849023,-74.062953,"mia",34.730283,136.508588 

Antwort

0

Ihre lons und Lats sind derzeit Liste. Sie müssen durchlaufen, um die Koordinaten zu erhalten. Hier

print(type(lons)) 

ist, was ich kam mit:

for x, y, x2, y2 in zip(lats[0::1], lons[0::1], lats2[0::1], lons2[0::1]): 
    eq_map.drawgreatcircle(x, y, x2, y2, linewidth=2, color='b') 

Es sei denn, Sie wollen Plots erstellen und Sie müssen nicht

x,y = eq_map(lons, lats) 
x2,y2 = eq_map(lons2,lats2) 

Mit Plots

for lats, lons, lats2, lons2 in zip(lats[0::1], lons[0::1], lats2[0::1], lons2[0::1]): 
    x,y = eq_map(lons, lats) 
    x2,y2 = eq_map(lons2,lats2) 
    eq_map.plot(x, y, marker='.', color='r', markersize=10) 
    eq_map.plot(x2, y2, marker='.', color='r', markersize=10) 
    eq_map.drawgreatcircle(lons, lats, lons2, lats2, linewidth=2, color='b')