web-dev-qa-db-ja.com

GeoPandasはポリゴンにラベルを付ける

利用可能なシェイプファイルがある場合 こちら :マップ内の各ポリゴン(郡)にラベルを付けたいです。これは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()

前もって感謝します!

20
Dance Party2

_c['geometry']_は、_shapely.geometry.polygon.Polygon_オブジェクトで構成されるシリーズです。これを確認して確認できます

_In [23]: type(c.ix[23, 'geometry'])
Out[23]: shapely.geometry.polygon.Polygon
_

Shapely docs からメソッド representative_point() があります

ジオメトリックオブジェクト内にあることが保証されている安価に計算されたポイントを返します。

ポリゴンオブジェクトにラベルを付ける必要がある状況に最適です。次に、geopandasdataframe、_'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

32
lanery

ループする必要はありません。ここでは、applyで注釈を付ける方法を示します。

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