如何在Python中为Shapefile中的多边形绘制其索引序号
如何在Python中为Shapefile中的多边形绘制其索引序号
嘿,我来帮你搞定在多边形里标注索引的问题!首先提个小细节,你原来的代码里有个笔误:gdf= = gpd.read_file应该改成gdf = gpd.read_file哦。
其实你完全不用把索引导出到CSV再用Basemap处理,直接用GeoPandas配合Matplotlib就能轻松在每个多边形内部标注对应的索引序号。下面是具体的解决方案:
核心思路
- 完整读取Shapefile数据,保留原有的索引和所有属性;
- 计算每个多边形的内部代表点(这个点会确保落在多边形内部,比中心更靠谱);
- 先绘制多边形的边界,再遍历每个多边形,把索引标注在代表点的位置。
完整代码示例
import geopandas as gpd import matplotlib.pyplot as plt # 读取Shapefile,保留所有原始数据(包括默认索引) gdf = gpd.read_file("path/to/shapefile") # 为每个多边形计算内部代表点,存为新列 gdf['rep_point'] = gdf['geometry'].representative_point() # 创建绘图画布 fig, ax = plt.subplots(figsize=(5, 5)) # 绘制多边形的红色边框(无填充色) gdf.plot(ax=ax, color='none', edgecolor='r', linewidths=1.8) # 遍历每个多边形,标注索引 for idx, row in gdf.iterrows(): # 获取代表点的坐标 x, y = row['rep_point'].x, row['rep_point'].y # 在坐标位置标注索引,可调整字体大小、对齐方式 plt.text(x, y, str(idx), fontsize=10, ha='center', va='center') plt.show()
对你问题的解答
- 关于获取索引:你之前写的
gdf=shp['index']是不对的,GeoDataFrame的索引可以直接通过gdf.index获取,或者像上面代码里那样用iterrows()遍历的时候直接拿到每个行的索引idx,根本不需要导出到CSV。 - 关于直接绘制索引:当然可以直接在Python里完成!上面的代码就是直接把索引标注在多边形内部,不需要额外工具。
可选优化小技巧
- 如果你的Shapefile里有自己定义的编号列(不是默认的整数索引),只需要把
str(idx)换成str(row['你的编号列名'])就行; - 如果觉得代表点位置不合适,也可以用多边形的中心
row['geometry'].centroid,但要注意:有些特殊形状的多边形(比如环形),中心可能落在多边形外面,这时候representative_point()会更稳妥。
备注:内容来源于stack exchange,提问作者Zilore Mumba
相关产品推荐
相关产品推荐

