
本文介绍使用 geopandas 和 matplotlib 为 shapefile 中每个多边形自动添加内部序号标签的方法,通过计算几何中心(centroid)定位文本位置,避免重叠与偏移,支持自定义字体、颜色与对齐方式。
本文介绍使用 geopandas 和 matplotlib 为 shapefile 中每个多边形自动添加内部序号标签的方法,通过计算几何中心(centroid)定位文本位置,避免重叠与偏移,支持自定义字体、颜色与对齐方式。
在地理数据可视化中,除常规轮廓渲染外,常需在每个面要素(polygon)内部标注其唯一标识——如行索引(index)、ID 字段或自定义名称。GeoPandas 提供了高效的空间处理能力,结合 Matplotlib 可实现精准、可定制的图内标注。
首先,读取 Shapefile 并确保几何有效性;接着,为每个多边形计算质心(centroid),这是最稳定、居中且适用于大多数规则/不规则多边形的标注锚点(相比 representative_point(),centroid 更具几何一致性,尤其适合凸多边形):
import geopandas as gpd
import matplotlib.pyplot as plt
# 读取矢量文件
gdf = gpd.read_file("path/to/your/file.shp")
# 验证几何有效性(可选但推荐)
gdf = gdf.make_valid()
# 计算每个面的质心
gdf["centroid"] = gdf.geometry.centroid
# 创建绘图对象
fig, ax = plt.subplots(figsize=(8, 6))
gdf.plot(ax=ax, facecolor='none', edgecolor='steelblue', linewidth=1.2)
# 遍历每一行,在质心位置标注索引(也可替换为 gdf['id']、gdf['name'] 等字段)
for idx, row in gdf.iterrows():
x, y = row["centroid"].x, row["centroid"].y
ax.text(x, y, str(idx),
fontsize=9,
ha='center', # 水平居中对齐
va='center', # 垂直居中对齐
fontweight='bold',
color='darkred')
plt.title("Polygon Index Labels (by Row Index)", fontsize=12)
plt.axis('equal') # 保持坐标系比例一致,避免形变
plt.tight_layout()
plt.show()
⚠️ 注意事项:
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
- 若多边形极小或呈细长条状,质心可能落在几何外部(如月牙形)。此时建议改用
representative_point()(保证在面内),但需注意其位置非严格居中; - 标注前建议调用
gdf.make_valid()处理无效几何,防止.centroid报错; - 如需标注字段而非索引,请将
str(idx)替换为str(row['your_field_name']),并确保该字段存在且非空; - 对于高密度区域,可添加
ax.text(..., bbox=dict(boxstyle="round,pad=0.2", fc="yellow", alpha=0.7))实现背景遮罩,提升可读性。
该方法无需导出 CSV 或借助 Basemap,完全在内存中完成空间计算与图形渲染,简洁、高效且易于集成到自动化制图流程中。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










