【问题标题】:Annotate city names标注城市名称
【发布时间】:2020-05-25 08:48:55
【问题描述】:

我想在坐标xy=(52.52, 13.405) 处标注城市名称柏林。我试过ax.annotate() 会产生一张奇怪的地图。也许它与坐标的CRS有关?

import geopandas as gpd
import contextily as ctx

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world = world[(world.name=="Germany")]
world = world.to_crs(epsg=3857)

ax = world.plot(figsize=(10, 10), color='none', linewidth=1, alpha=0.5)
ax.annotate("Berlin", xy=(52.52, 13.405))

ctx.add_basemap(ax, url=ctx.providers.Stamen.Watercolor, zoom=9)

【问题讨论】:

  • 不熟悉geopandas,但在matplotlib.pyplotannotate 的语法是ax.annotate('text',(x,y))。我猜geopandas 写在matplotlib 之上。试试这个ax.annotate('Berlin',xy)

标签: python matplotlib geopandas contextily


【解决方案1】:

根据Annotations docpage,您的代码应如下所示:

ax.annotate("Berlin", xy=(52.52, 13.405))

【讨论】:

  • 不适用。也许它与坐标的CRS有关?
【解决方案2】:

我的初始代码在两个方面存在缺陷。正如其他答案所指出的那样,我错误地使用了ax.annoate()

此外,world 已转换为 espg=3857。柏林市的坐标不是。使用转换后的坐标它可以工作:

import geopandas as gpd
import contextily as ctx

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world = world[(world.name=="Germany")]
world = world.to_crs(epsg=3857)

ax = world.plot(figsize=(10, 10), color='none', linewidth=1, alpha=0.5)
ax.annotate("Berlin", xy=(1491636.9565986055, 6895388.533179172))

ctx.add_basemap(ax, url=ctx.providers.Stamen.Watercolor, zoom=9)

【讨论】:

    猜你喜欢
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-27
    • 2014-09-21
    • 1970-01-01
    相关资源
    最近更新 更多