【问题标题】:Plotting a Map with geopy and matplotlib in Jupyter Notebook在 Jupyter Notebook 中使用 geopy 和 matplotlib 绘制地图
【发布时间】:2016-11-08 15:59:43
【问题描述】:

我正在尝试绘制美国地图并标记全国各个城市。我得到了地图工作。但是我有两个问题:第一个是,我收到了这个错误消息:

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

【问题讨论】:

    标签: python matplotlib matplotlib-basemap geopy


    【解决方案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)) 
    

    【讨论】:

    • 嘿,无花果的作品。但是当我使用 for 循环时,你给了我地图上的红点没有出现,plt.annotate 也不起作用,它说标签未定义
    • @DeepakM 我想我有点不清楚。我只发布了对 for 循环开头的修改。我将其余部分添加到上面的答案中。标签是点旁边显示的城市名称。上面也添加了。
    • 嘿,伙计,真的很感谢所有的帮助,很抱歉再次打扰你,但为什么会出现错误 NameError: name 'count' is not defined @e-dschungel
    • 您应该尝试仔细阅读并理解错误信息。 `` NameError: name 'count' is not defined`` 表示在map.plot 行中使用之前没有为变量count 赋值。在example 中,您从count 复制粘贴代码用于根据会议参与者的数量调整点的大小。当您使用恒定的点大小时,只需使用固定值,例如 map.plot(x,y,marker='o',color='Red',markersize=1) 或完全忽略它。
    • 我又试了一次,没有错误消息,这一次,但它仍然没有绘制城市,有什么我没有做的,为什么它不起作用? @e-dschungel
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2019-12-27
    • 2017-02-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    相关资源
    最近更新 更多