You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Geopandas实现按标记大小创建图例的问题

解决Geopandas地图标记大小的图例重叠问题

你直接用plt.legend(busgp_data['num_of_ESBs'], ...)生成图例时,会把所有数据点的标记都塞进图例,而且没对应你要的1、10、50这三个指定量级,所以才会出现标记重叠的情况。正确的做法是手动创建对应这三个数值的图例条目,具体修改后的代码如下:

import matplotlib.pyplot as plt
from matplotlib.lines import Line2D

# 绘制美国底图
base = usa.plot(figsize=(20,20), edgecolor='white', linewidth=1)
# 绘制电动巴士点位
points = busgp_data['geometry'].plot(ax=base,
                                     color='gold',
                                     marker='o',  
                                     markersize=12 * busgp_data['num_of_ESBs'], 
                                     edgecolor='black', 
                                     alpha=0.7)
# 创建自定义图例元素,对应1、10、50辆巴士的标记大小
legend_elements = [
    Line2D([0], [0], marker='o', color='w', markerfacecolor='gold', 
           markeredgecolor='black', markersize=12*1, label='1辆'),
    Line2D([0], [0], marker='o', color='w', markerfacecolor='gold', 
           markeredgecolor='black', markersize=12*10, label='10辆'),
    Line2D([0], [0], marker='o', color='w', markerfacecolor='gold', 
           markeredgecolor='black', markersize=12*50, label='50辆')
]
# 添加自定义图例
plt.legend(handles=legend_elements, loc='lower left')

# 标题和刻度设置
plt.title('美国电动校车分布', fontdict={'fontsize':20})
plt.tick_params(
    axis='both',         
    which='both',       
    bottom=False,     
    left=False,
    labelleft=False,
    labelbottom=False) 
plt.show()

关键说明:

  • 用Line2D手动构建每个图例项,markersize和你绘制点位时的12 * num_of_ESBs保持一致比例,确保图例标记大小和地图上的点位大小对应。
  • color='w'是让图例项的线条颜色为白色,只显示标记,避免出现多余线条。
  • 通过handles参数把自定义的图例元素传入plt.legend(),就能得到你想要的三个清晰不重叠的图例条目。

内容的提问来源于stack exchange,提问作者Andrew Whitman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 05:25:43