将图例添加到 geopandas

Add legend to geopandas

我有一张智利地图(http://labgeo.ufro.cl/fichas/chile_geo/ficha_cl_geo.html 第一个 link 上面写着“智利大陆”),我想绘制它并添加一些我有经纬度数据的中心点。

我是 geopandas 和 matplotlib 的新手,但我使用来自此 post 的 matplotlib 的建议答案,设法将地图的中心绘制为不同颜色的点:Color by Column Values in 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() 来显示带有颜色编号的 id 字典,如下所示: geo_df_.plot(ax=map_.plot(figsize=(40, 30)), marker='o', c =geo_df_.Color, markersize=100).legend()。 但是我得到这个错误

No handles with labels found to put in legend.

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

我想实现的是这样的传说:

取自此post:Control ggplot2 legend look without affecting the plot 我理想的图例是在边上有一个正方形,所有彩色点都用它们代表的 id 中心标识。例如黄点:(中心)5,紫点:8,等等

我所管理的只是一个点,显示整个字典是这样的:

不使用c,而是column。然后 legend=True 会显示图例,categorical=True 会给你想要的。在这种特定情况下,您可能 运行 没有颜色,因此如果您希望所有颜色都不同,则必须设置另一个颜色图 (cmap='')

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