2016-08-11 2 views
6

Angesichts der verfügbaren Shape-Datei here: Ich möchte jedes Polygon (Grafschaft) in der Karte beschriften. Ist das mit GeoPandas möglich?GeoPandas Label Polygons

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() 

Vielen Dank im Voraus!

Antwort

11

c['geometry'] ist eine Serie bestehend aus shapely.geometry.polygon.Polygon Objekten. Sie können dies überprüfen, indem

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

Vom Shapely docs Überprüfung gibt es ein Verfahren representative_point() dass

Gibt einen billig berechneten Punkt, der innerhalb des geometrischen Objekts sein garantiert.

Klingt ideal für eine Situation, in der Sie die Polygonobjekte beschriften müssen! Anschließend können Sie eine neue Spalte für Ihre geopandasdataframe erstellen, 'coords' wie so

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

Jetzt, wo Sie eine Reihe von Koordinaten zu jedem Polygon-Objekt gehör (jeder Kreis) können Sie Ihr Grundstück mit Anmerkungen versehen, indem Sie durch Ihren Datenrahmen Iterieren

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

enter image description here

+0

@Fantastic! Vielen Dank. –

8

keine Notwendigkeit, Schleife, hier ist, wie Sie mit Anmerkungen versehen können mit anwenden:

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

Elegant und einfach. –

+1

Haben Sie einen Tippfehler gemacht: 'xy = x.coords'? – dmvianna

+0

Die angenommene Antwort funktionierte für mich, aber nicht diese. Ich habe zwei Spalten von Interesse für dieses Beispiel, die 'Name' und' Geometrie' sind. Wenn apply sie überstreicht und die Ausdrucke die Daten nicht wirklich Zeile für Zeile erhalten, ist es eher Spalte für Spalte. – h4k1m

Verwandte Themen