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

使用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()

关键说明

  1. 提取颜色与标签:先获取原有图例的颜色值和自定义后的标签文本,确保新图例与原分色规则匹配。
  2. 移除默认图例:删除Geopandas自动生成的色块图例,避免冲突。
  3. 构建标记条目:使用Line2D创建仅包含方形标记的图例条目,通过linestyle=''隐藏线条,只保留标记点,markersize可按需调整大小。
  4. 添加新图例:用新的标记条目和标签重新生成图例,位置与原设置保持一致。

内容的提问来源于stack exchange,提问作者Fahim Hossain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:40:26