c['geometry'] is a series consisting of shapely.geometry.polygon.Polygon objects. You can verify this by setting
In [23]: type(c.ix[23, 'geometry']) Out[23]: shapely.geometry.polygon.Polygon
From Shapely docs there is a representative_point() method that
Returns an inexpensive computed point that is guaranteed to be within a geometric object.
Sounds perfect for situations where you need to label polygon objects! Then you can create a new column for geopandas dataframe , 'coords' like this
c['coords'] = c['geometry'].apply(lambda x: x.representative_point().coords[:]) c['coords'] = [coords[0] for coords in c['coords']]
Now that you have a set of coordinates related to each object of the polygon (each district), you can annotate your plot, iterate through your dataframe
c.plot() for idx, row in c.iterrows(): plt.annotate(s=row['NAME'], xy=row['coords'], horizontalalignment='center')

source share