2016-08-11 2 views
6

here उपलब्ध आकार फ़ाइल को देखते हुए: मैं मानचित्र में प्रत्येक पॉलीगॉन (काउंटी) को लेबल करना चाहता हूं। क्या यह जियोपांडा के साथ संभव है?जियोपैंडस लेबल पॉलीगन्स

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

एक सस्ते में गणना की बात यह है कि ज्यामितीय वस्तु के भीतर होने की गारंटी है देता है

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

जाँच Shapely docs से इसकी पुष्टि कर सकते हैं।

ऐसी स्थिति के लिए आदर्श लगता है जिसमें आपको बहुभुज वस्तुओं को लेबल करने की आवश्यकता होती है! फिर आप तो

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' और 'ज्यामिति' हैं। लागू होने पर उन पर लूपिंग होती है, और प्रिंट के अनुसार यह वास्तव में पंक्ति से डेटा पंक्ति नहीं प्राप्त कर रहा है, यह कॉलम द्वारा कॉलम की तरह अधिक है। – h4k1m