Python 将图例添加到geopandas

Python 将图例添加到geopandas,python,matplotlib,legend,shapefile,geopandas,Python,Matplotlib,Legend,Shapefile,Geopandas,我有一张智利地图(第一个链接上写着“智利大陆”),我想把它画出来,并添加一些我有纬度和经度数据的中心点 我是geopandas和matplotlib的新手,但我使用本文中matplotlib的建议答案,成功地将地图的中心绘制为不同颜色的点: 这是我的密码: #Loading data, since I am making the coordinates up they won´t fit the map nicely but you will get the idea map_= gpd.re

我有一张智利地图(第一个链接上写着“智利大陆”),我想把它画出来,并添加一些我有纬度和经度数据的中心点

我是geopandas和matplotlib的新手,但我使用本文中matplotlib的建议答案,成功地将地图的中心绘制为不同颜色的点:

这是我的密码:

#Loading data, since I am making the coordinates up they won´t fit the map nicely but you will get the idea

map_= gpd.read_file("cl_continental_geo.shp")
geo_df_ = pd.DataFrame({"id":np.random.randint(20, size=133) ,"Latitude": np.random.normal(-34.406922,7.819504, 133), "Longitud": np.random.normal(-71.243350,1.254126, 133)})

geometry =[Point(xy) for xy in zip( geo_df_["Longitud"],geo_df_["Latitude"])]
geo_df_ =gpd.GeoDataFrame(geo_df_, crs={"init":"epsg:4326"},geometry= geometry)

# creating color map for categories
categories = np.unique(geo_df_["id"])
colors = np.linspace(0, 1, len(categories))
colordict = dict(zip(categories, colors))

#matching it to the geopandas df
geo_df_["Color"] = geo_df_["id"].apply(lambda x: colordict[x])

#plotting    
geo_df_.plot(ax=map_.plot(figsize=(40, 30)), marker='o', c =geo_df_.Color, markersize=100)
我不能尝试不同的事情,那就是传说的出现

  • 我尝试添加legend=True
  • 我曾尝试先定义ax,但无法正确地输入数据以创建绘图,结果一无所获
  • 尝试了这个解决方案,但我的shp文件只有一行包含多多边形信息,我不知道如何创建交叉数据帧
到目前为止,我唯一能做的就是通过在末尾添加.legend()来显示带有颜色编号的ID字典,如下所示:
geo\u-df.plot(ax=map\u.plot(figsize=(40,30)),marker='o',c=geo\u-df.Color,markersize=100)。图例()。
但是我得到了这个错误

未找到要放入图例中的标签句柄

但是当我把颜色字典作为参数传递时,它会在图例中显示一点

我想要实现的是这样一个传奇:

摘自本帖: 我的理想图例是在侧面有一个正方形,上面有所有的彩色点,它们代表id中心。例如黄点:(中心)5,紫点:8,等等

我只管理了一个点,它显示了整个字典,如下所示:


不要使用
c
,而是使用
column
。然后
legend=True
将执行显示图例的技巧,并且
category=True
将为您提供所需的颜色。在这种特定情况下,您可能会用完颜色,因此如果希望所有颜色都不同,您必须设置另一个颜色映射(
cmap='


如果在代码末尾添加
plt.legend()
,会发生什么情况?它会给出带有标签的No句柄。如果我在plot函数中添加label=geo_df_.Color,然后添加plt.legend()它会打印带有颜色编号的ID颜色字典。然后它会给我一个颜色点和一个类别列表。它会打印图例,但不会打印所有的颜色点或映射。你能给你的问题添加一张图片来更好地理解这个问题吗?嘿,谢谢你的回答时间。问题是颜色dict中的值并不代表一个对比度量,它们是我在另一篇文章后生成的数字,为每个唯一的中心id赋予颜色。我需要的是一个图例,让我可以直观地看到地图中某个特定中心的位置。所以我需要一个在中心代码和点颜色之间的地图。而不是一个颜色巴里我想我不明白。有你链接的数据和上面的一个片段,哪列存储了你想要绘制的值?我想提供帮助,但我不知道你想要实现什么。我想要绘制的是智利地图中中心的位置。颜色将指示中心的id。我在t中编辑了我的问题他最后添加了一个我希望获得的示例。
geo_df_uu.plot(ax=ax,marker='o',column='id',category=True,markersize=100,legend=True)
?就是这样!唯一的问题是图例中的颜色重复,因此每三个中心使用相同的颜色。请用这行更新您的问题,以便我可以接受您的答案。谢谢
map_= gpd.read_file("/Users/martin/Downloads/cl_continental_geo/cl_continental_geo.shp")
geo_df_ = pd.DataFrame({"id":np.random.randint(20, size=133) ,"Latitude": np.random.normal(-34.406922,7.819504, 133), "Longitud": np.random.normal(-71.243350,1.254126, 133)})

geometry =[Point(xy) for xy in zip( geo_df_["Longitud"],geo_df_["Latitude"])]
geo_df_ =gpd.GeoDataFrame(geo_df_, crs={"init":"epsg:4326"},geometry= geometry)

#plotting    
ax = map_.plot(figsize=(40, 30))
geo_df_.plot(ax=ax, marker='o', column='id', categorical=True,
             markersize=100, legend=True, cmap='tab20')