GeoPandas标签多边形

时间:2016-08-11 14:28:36

标签: python-3.x matplotlib geopandas

给定可用的形状文件here:我想在地图中标记每个多边形(县)。这可能与GeoPandas有关吗?

import geopandas as gpd
import matplotlib.pyplot as plt
%matplotlib inline

shpfile=<Path to unzipped .shp file referenced and linked above>
c=gpd.read_file(shpfile)
c=c.loc[c['GEOID'].isin(['26161','26093','26049','26091','26075','26125','26163','26099','26115','26065'])]
c.plot()

提前致谢!

2 个答案:

答案 0 :(得分:28)

c['geometry']是由shapely.geometry.polygon.Polygon个对象组成的系列。您可以通过选中

来验证这一点
In [23]: type(c.ix[23, 'geometry'])
Out[23]: shapely.geometry.polygon.Polygon

Shapely docs开始,有一个方法representative_point()

  

返回一个保证在其中的廉价计算点   几何对象。

对于需要标注多边形对象的情况,这听起来很理想!然后,您可以为geopandas dataframe创建一个新列,'coords'就像这样

c['coords'] = c['geometry'].apply(lambda x: x.representative_point().coords[:])
c['coords'] = [coords[0] for coords in c['coords']]

现在您有一组与每个多边形对象(每个县)相关的坐标,您可以通过迭代数据框来注释您的绘图

c.plot()
for idx, row in c.iterrows():
    plt.annotate(s=row['NAME'], xy=row['coords'],
                 horizontalalignment='center')

enter image description here

答案 1 :(得分:18)

无需循环,以下是使用apply注释的方法:

ax = df.plot()
df.apply(lambda x: ax.annotate(s=x.NAME, xy=x.geometry.centroid.coords[0], ha='center'),axis=1);