在Jupyter Notebook中使用geopy和matplotlib绘制地图

时间:2016-11-08 15:59:44

标签: python matplotlib matplotlib-basemap geopy

我试图绘制美国地图并标记全国各个城市。我得到了地图上班。但我有两个问题:第一个是,我收到此错误消息:

  

AttributeError:'NoneType'对象没有属性'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 个答案:

答案 0 :(得分:2)

  1. 我猜你的city_list中有一些内容Nominatim无法解决。我在下面添加了一张支票。

  2. 您必须在之前致电figure(num=1,figsize=(8,9)) 以绘制任何内容(此处:地图)。

  3. 您可以使用plt.annotate,见下文。

  4. 希望这有帮助。

        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))