2017-05-07 1 views
2

J'essaie (en python 3.6) de tracer des points (aéroports) à partir d'une base de données (modules sqlite et basemap) sur une carte globale selon les coordonnées de latitude et de longitude. Cependant, mon code trace les points comme une figure distincte de la carte et une erreur d'exécution qui dit: RuntimeError: Impossible de mettre un seul artiste dans plus d'une figure. Je ne sais pas ce que je fais mal:Les points de tracé sur le fond de carte python donnent une erreur d'exécution

from mpl_toolkits.basemap import Basemap 
import matplotlib.pyplot as plt 
import sqlite3 
conn = sqlite3.connect("flights.db") 
cur = conn.cursor() 
cur.execute("select * from airlines limit 5;") 
results = cur.fetchall() 
print(results) 
coords = cur.execute(""" select cast(longitude as float), \ 
        cast(latitude as float) from airports;""" \ 
        ).fetchall() 

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

m.drawcoastlines() 
m.drawmapboundary() 

x, y = m([l[0] for l in coords], [l[1] for l in coords]) 
m.scatter(x, y, 1, marker='o', color='red') 

L'erreur que je reçois est la suivante:

RuntimeError: Can not put single artist in more than one figure 
+0

L'ensemble de données 'flights.db' peut être trouvé ici: https://www.dropbox.com/s/a2wax843eniq12g/flights.db?dl=0 – nigus21

Répondre

1

Réécrire dernières lignes comme

lons = [l[0] for l in coords] 
lats = [l[1] for l in coords] 
x, y = m(lons, lats) 

m.scatter(x, y, 1, marker='o', color='red') 
plt.show() 

enter image description here