当前位置: 首页 > 知识库问答 >
问题:

使用matplotlib和geopandas在具有不同投影的地图上注释标签时出现问题

龙承颜
2023-03-14

我使用的默认贴图如下:

world = geopandas.read_file(gpd.datasets.get_path('naturalearth_lowres'))

我可以从另一个GeoDataFrame(这里称为sample_gdf)成功地将标签注释到此地图,下面是循环示例:

for idx, row in sample_gdf.iterrows():
     plt.annotate(text=row['country_name'], # e.g. this column contains the names of each countries
                  xy=(row['longitude'], row['latitude']), # e.g. these columns are showing the coordinates of middle points of each countries
                  horizontalalignment='center')

这就是epsg=4326时的样子当我想改变地图的投影时,问题就开始了。上面变量world的默认CRS是epsg: 4326。一旦我像这样改变投影:

world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
world = world.to_crs(epsg=3035)

专注于欧洲,我的标签不再出现在正确的位置。一周来,我一直在寻找解决这个问题的建议,但目前找不到任何解决方案。谢谢你的帮助。这是epsg=3035时的情况,标签显示在左下角。

共有1个答案

祁星阑
2023-03-14

所有这些都归结为您用来定位注释的['longitude']、['latitude']列中存储的内容。您需要确保这些都在正确的投影中,因为坐标需要反映绘图上使用的实际单位。

重新投影后,获取新坐标并使用这些坐标。

sample_gdf["x"] = sample_gdf.centroid.x
sample_gdf["y"] = sample_gdf.centroid.y

sample_gdf.plot()

for idx, row in sample_gdf.iterrows():
     plt.annotate(text=row['country_name'], # e.g. this column contains the names of each countries
                  xy=(row['x'], row['y']), # e.g. these columns are showing the coordinates of middle points of each countries
                  horizontalalignment='center')
 类似资料:
  • 我有一个小csv,它有来自英格兰伯明翰的6个坐标。我用pandas读取csv,然后将其转换为GeoPandas数据帧,用形状优美的点更改纬度和经度列。我现在正试图绘制我的GeoDataframe,我能看到的只是点。我怎样才能把伯明翰地图也画出来?如能提供有关GeoPandas的良好文档资料,也将不胜感激。

  • 问题内容: 如何添加值的标签以显示在条形图中的条形上方: 问题答案: 捕获绘图所在的轴,然后将其作为普通对象进行操作。将值放在条形上方将是这样的:

  • 嗨,我想写一个查询使用条件:以下查询必须使用条件创建: “从S2中选择不同的(s2Taxper),其中s2Tc='601'和s2Txcd!=”” 提前谢谢

  • 如何添加要显示在条形图中条形图上方的值标签:

  • 我正在尝试使用Geopandas和Matplotlib绘制西班牙地图。我使用的是您在下面看到的GeoJSON文件,其中的几何体是地理坐标(EPSG 4326) 我想在墨卡托投影中绘制地图,但当我尝试使用 我收到一个错误说: 我已按照本手册中的说明进行操作http://geopandas.org/projections.html. 其中指出,如果geopandas数据帧不与CRS的信息一起计算,则必

  • 问题内容: 我有一个返回定义为的方法: 我不清楚此方法的实际实现,但是当我尝试这样做时: 我收到以下编译时错误消息: Map类型的put(String,capture#9-of?)方法不适用于参数(String,String) 问题是什么?是什么类型的吗? 提前致谢。 问题答案: 通配符的意思是“值类型参数可以是任何东西”- 并不 意味着“您可以像使用任何想要的东西一样使用它”。换句话说,a 作为