使用Geopandas绘制分级统计图时,如何设置方形图例标记?
解决Geopandas分色地图图例替换为单个方形标记的问题
当使用scheme='quantiles'绘制分色地图时,Geopandas默认生成的图例条目是颜色色块(Patch对象),直接对legendHandles调用set_marker('s')会在色块上叠加多个标记,无法实现单个方形标记的需求。以下是修正后的实现方案:
完整代码
import matplotlib.pyplot as plt from matplotlib.lines import Line2D fig, ax = plt.subplots(figsize=(18, 10)) europe_gdf_without_russia.plot( column="percentage_2nd_booster_60plus", cmap='Blues', legend=True, legend_kwds={"title":"Percentage", 'loc':'center left', "fmt": "{:.2f}%", 'bbox_to_anchor':(1,0.5), }, edgecolor='black', linewidth=0.8, k=4, scheme='quantiles', missing_kwds={ "color": "lightgrey", "label": "No data", }, zorder=1, ax=ax ) # 自定义图例文本 leg = ax.get_legend() new_labels = [] for count, lbl in enumerate(leg.get_texts()): label_text = lbl.get_text() lowe1 = label_text.split()[0] lower = lowe1.replace(',',' -') upper = label_text.split()[1] if count == 0: new_text = f' <{upper}' else: new_text = f' {lower} {upper}' new_labels.append(new_text) lbl.set_text(new_text) # 获取原有图例的颜色 legend_colors = [handle.get_facecolor() for handle in leg.legendHandles] # 移除默认色块图例 ax.get_legend().remove() # 创建单个方形标记的图例条目 new_handles = [] for color in legend_colors: # 用Line2D创建仅含方形标记的条目(隐藏线条) handle = Line2D([0], [0], marker='s', color=color, linestyle='', markersize=10) new_handles.append(handle) # 添加新图例 ax.legend(handles=new_handles, labels=new_labels, title="Percentage", loc='center left', bbox_to_anchor=(1,0.5)) plt.show()
关键说明
- 提取颜色与标签:先获取原有图例的颜色值和自定义后的标签文本,确保新图例与原分色规则匹配。
- 移除默认图例:删除Geopandas自动生成的色块图例,避免冲突。
- 构建标记条目:使用
Line2D创建仅包含方形标记的图例条目,通过linestyle=''隐藏线条,只保留标记点,markersize可按需调整大小。 - 添加新图例:用新的标记条目和标签重新生成图例,位置与原设置保持一致。
内容的提问来源于stack exchange,提问作者Fahim Hossain
相关产品推荐
相关产品推荐

