如何使用GeoPandas为点要素按指定列值分配自定义颜色?
自定义鸟类观测点配色解决方案
你需要的自定义配色需求直接通过GeoPandas自带的绘图接口即可实现,无需额外引入其他工具,现有代码只需做少量调整即可生效。
方案1:通过palette参数传入自定义配色(推荐)
你已经定义好了bird_palette字典存储鸟类名称和对应颜色的映射,仅需要在调用GeoDataFrame的plot方法时,新增palette参数传入该字典即可,该方法会自动匹配图例颜色,无需额外配置。
修改后的绘图代码如下:
# Assign colors to each bird name bird_palette = {'Boba': 'turquoise', 'Kiwi': 'green', 'Pretzel' : 'brown'} # Specify France map coordinates and add more formatting map_france = geo_df.to_crs('EPSG:3857').plot( column='bird_name', linewidth=2, ax=ax, alpha=0.5, legend=True, markersize=10, palette=bird_palette # 新增此行传入自定义配色字典 ) ctx.add_basemap(map_france, source=ctx.providers.CartoDB.Positron)
方案2:预先生成颜色列(适配特殊场景)
如果遇到palette参数不生效的情况,可以先将鸟类名称映射为对应颜色,生成单独的颜色列后指定给color参数,适合需要更灵活控制颜色的场景,代码如下:
# Assign colors to each bird name bird_palette = {'Boba': 'turquoise', 'Kiwi': 'green', 'Pretzel' : 'brown'} # 生成颜色列 geo_df['point_color'] = geo_df['bird_name'].map(bird_palette) # Specify France map coordinates and add more formatting map_france = geo_df.to_crs('EPSG:3857').plot( color=geo_df['point_color'], # 指定颜色列 linewidth=2, ax=ax, alpha=0.5, markersize=10 ) ctx.add_basemap(map_france, source=ctx.providers.CartoDB.Positron)
注:该方法需要手动构造图例,适合不需要自动生成图例的场景
内容的提问来源于stack exchange,提问作者Azurespot
相关产品推荐
相关产品推荐

