2016-08-11 2 views
6

모양 파일을 사용할 수 있음 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() 

미리 감사드립니다.

답변

11

c['geometry']shapely.geometry.polygon.Polygon 개체로 구성된 시리즈입니다. 당신은 방법

가 기하학적 객체 내에서 보장되는 저렴한 비용으로 계산 된 포인트를 돌려 representative_point()이있는 Shapely docs에서

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

을 확인하여이를 확인할 수 있습니다.

다각형 개체에 레이블을 지정해야하는 상황에 이상적입니다. 그러면 이제 각 다각형 객체 (각 카운티)에 관한 일련의 좌표가 너무

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

처럼, 당신의 geopandasdataframe에 대한 'coords'를 새 열을 만들 수 있습니다, 당신은 당신의 dataframe을 반복하여 플롯 주석을 달 수 있습니다 여기

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

enter image description here

+0

@Fantastic! 감사. –

8

루프 할 필요가, 당신이 주석을 수있는 방법입니다이 적용

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

우아하고 간단합니다. –

+1

오타를 만들었습니까?'xy = x.coords'? – dmvianna

+0

받아 들여진 대답은 나를 위해 일했지만이 일은 아닙니다. 나는이 예제에서'name'과'geometry'라는 두 개의 칼럼을 가지고 있습니다. 적용이 그들 위에 반복 될 때, 인쇄물에 따라 실제로 행 단위로 데이터를 얻지는 않습니다. 이는 열 단위로 더 비슷합니다. – h4k1m