2016-11-08 8 views
0

Здравствуйте, я пытаюсь построить карту США и отметить различные города по всей стране. Я получил карту для работы. Но у меня две проблемы. Во-первых, я получаю сообщение об ошибке:Построение карты с помощью геофизики и matplotlib в Jupyter Notebook

AttributeError: 'NoneType' object has no attribute 'longitude' 

Во-вторых, я пытался увеличить график с помощью атрибута plt.figsize однако моя карта все еще остается один и тот же размер.

И, наконец, это не проблема, но что, если я хотел бы наметить точки с названиями городов Как я могу это сделать?

Вот мой код карты:

import matplotlib.pyplot as plt 
from mpl_toolkits.basemap import Basemap 
from geopy.geocoders import Nominatim 
import math 

city_list = list(flight_data["OriginCityName"].unique()) 
cities = city_list 
scale = 1 

map = Basemap(width=10000000,height=6000000,projection='lcc', 
      resolution=None,lat_1=45.,lat_2=55,lat_0=50,lon_0=-107.) 
plt.figure(figsize=(19,20)) 
map.bluemarble() 


# Get the location of each city and plot it 
geolocator = Nominatim() 
for city in cities: 
     loc = geolocator.geocode(city) 
     if not loc: 
      print("Could not locate {}".format(city)) 
      continue 
     x, y = map(loc.longitude, loc.latitude) 
     map.plot(x,y,marker='o',color='Red',markersize=5) 
     plt.annotate(city, xy = (x,y), xytext=(-20,20)) 
plt.show() 

enter image description here

ответ

1
  1. Я предполагаю, что есть что-то в вашем city_list Nominatim не может решить. Я добавил чек для этого ниже.

  2. Вы должны позвонить figure(num=1,figsize=(8,9))до вы ничего не намереваетесь (здесь: карта).

  3. Вы можете использовать plt.annotate, см. Ниже.

Надеюсь, это поможет.

for city in cities: 
     loc = geolocator.geocode(city) 
     if not loc: 
      print("Could not locate {}".format(city)) 
      continue 
     x, y = map(loc.longitude, loc.latitude) 
     map.plot(x,y,marker='o',color='Red',markersize=int(math.sqrt(count))*scale) 
     plt.annotate(city, xy = (x,y), xytext=(-20,20)) 
+0

Эй, фиджиз работает. но когда я использовал цикл for, вы дали мне красные точки на карте, которые не отображаются, также plt.annotate не работает, он говорит, что метка не определена –

+0

@DeepakM Я думаю, что я был немного неясен. Я опубликовал только модификацию начала цикла for. Я добавил остальных к моему ответу выше. Метка - это название города, которое отображается рядом с точками. Также добавлено. –

+0

эй человек действительно ценит всю помощь, извините, что беспокоил вас снова, но почему это происходит с ошибкой NameError: name 'count' не определен @ e-dschungel –