基于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
相关产品推荐
相关产品推荐

