NetworkX: почему некоторые подключенные компоненты рассматриваются как отключенные, если они не отключены?
Я читаю shapefile
и создать из него график NetworkX следующим образом:
import networkx as nx
import matplotlib.pyplot as plt
G=nx.read_shp('C:\Users\MyName\MyFolder\case_study.shp')
posy = {k: v for k,v in enumerate(G.nodes())}
Y=nx.Graph() #Empty graph
Y.add_nodes_from(posy.keys()) #Add nodes preserving coordinates
l=[set(x) for x in G.edges()]
edg=[tuple(k for k,v in posy.items() if v in sl) for sl in l] #Map the G.edges start and endpoints onto pos
nx.draw_networkx_nodes(Y,posy,node_size=10,node_color='blue')
Y.add_edges_from(edg)
nx.draw_networkx_edges(Y,posy)
plt.xlim(460000, 541000)
plt.ylim(380000, 480000)
plt.xlabel('Easting [m]')
plt.ylabel('Northing [m]')
Этот график должен иметь 2 связанных компонента. Вместо этого, если я проверю, я получу 9 подключенных компонентов:
In[1]: gY = list(nx.connected_component_subgraphs(Y))
In[2]: len(gY)
Out[2]: 9
Это означает, что несколько топологических ошибок были унаследованы от самого шейп-файла. Я могу жестоко идентифицировать эти компоненты:
nx.draw(gY[0],posy,node_size=100,node_color='r',with_labels=False,font_size=8)
nx.draw(gY[1],posy,node_size=100,node_color='blue',with_labels=False,font_size=8)
nx.draw(gY[2],posy,node_size=100,node_color='green',with_labels=False,font_size=8)
nx.draw(gY[3],posy,node_size=100,node_color='grey',with_labels=False,font_size=8)
nx.draw(gY[4],posy,node_size=100,node_color='brown',with_labels=False,font_size=8)
nx.draw(gY[5],posy,node_size=100,node_color='yellow',with_labels=False,font_size=8)
nx.draw(gY[6],posy,node_size=100,node_color='orange',with_labels=False,font_size=8)
nx.draw(gY[7],posy,node_size=100,node_color='purple',with_labels=False,font_size=8)
nx.draw(gY[8],posy,node_size=100,node_color='white',with_labels=False,font_size=8)
plt.xlim(460000, 541000)
plt.ylim(380000, 480000)
plt.show()
График должен состоять только из двух компонентов: один пунктирный в черном, а другой пунктирный в сером.
Мой вопрос: если я увеличу масштаб вокруг красно-пурпурно-желтой области, я обнаружу, что узлы действительно связаны, поэтому не должно быть 3 подключенных компонента, а только один. Почему это происходит?