如何在地图中添加两个图例框?自定义标记样式需求
问题描述
我拥有圣保罗市的几何数据及各区域犯罪活动数据库,同时有2个需高亮显示的资产地理点(定义为asset)。使用以下代码绘图时,图例中资产显示为黑色色块,但我希望换成所用的x标记。想了解:能否在图例中同时显示犯罪率色块与x标记?是否需要创建两个图例框?或有其他方案?
import matplotlib.pyplot as plt from matplotlib.patches import Patch from matplotlib.path import Path import matplotlib.lines as mlines patches = [] for category, color in color_list.items(): patch = Patch(color=color, label=category) patches.append(patch) # 创建地图 ax = sao.plot(color=sao["Colors"]) # 设置标题 ax.set_title('Risk Areas - São Paulo, Brazil', fontweight='bold') # 隐藏坐标轴 ax.axis('off') # 绘制资产点 asset.plot(color='black', markersize = 110, marker= "$x$", ax=ax, label = "assets") fig = plt.gcf() fig.set_size_inches(18.5, 10.5) plt.legend(handles=patches + [Patch(color='black', label="assets")], loc='lower right', title = 'Crime Rate Level for Districts') plt.show()
解决方案
不需要创建两个图例框,一个图例即可同时显示犯罪率色块和资产的x标记,核心是用mlines.Line2D替代Patch来生成资产的图例项:
修改步骤
- 保留原有生成犯罪率分类色块图例的
Patch列表 - 用
mlines.Line2D创建资产的图例条目,指定marker为"$x$"、颜色为黑色,这样就能显示x标记而非色块 - 将资产的
Line2D对象加入图例的handles列表中
修改后的完整代码
import matplotlib.pyplot as plt from matplotlib.patches import Patch import matplotlib.lines as mlines patches = [] for category, color in color_list.items(): patch = Patch(color=color, label=category) patches.append(patch) # 创建地图 ax = sao.plot(color=sao["Colors"]) # 设置标题 ax.set_title('Risk Areas - São Paulo, Brazil', fontweight='bold') # 隐藏坐标轴 ax.axis('off') # 绘制资产点 asset.plot(color='black', markersize = 110, marker= "$x$", ax=ax, label = "assets") fig = plt.gcf() fig.set_size_inches(18.5, 10.5) # 创建资产的图例项(x标记) asset_legend = mlines.Line2D([], [], color='black', marker="$x$", linestyle='None', markersize=15, label='assets') # 合并图例项并显示 plt.legend(handles=patches + [asset_legend], loc='lower right', title = 'Crime Rate Level for Districts') plt.show()
说明
mlines.Line2D专门用于创建带标记的图例项,设置linestyle='None'可以只显示标记,不显示线条- 调整
markersize可以让图例中的x标记和图中资产点的大小匹配 - 所有图例项(色块+标记)会统一显示在同一个图例框内,无需拆分
内容的提问来源于stack exchange,提问作者gbam-ds
相关产品推荐
相关产品推荐

