Python NetworkX:为什么有些已连接的组件在未连接时被视为已断开连接?

Python NetworkX:为什么有些已连接的组件在未连接时被视为已断开连接?,python,graph,networkx,edges,connected-components,Python,Graph,Networkx,Edges,Connected Components,我正在阅读一个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.key

我正在阅读一个
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]')
此图应该有两个连接的组件。相反,如果我检查,我会得到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()
这意味着从shapefile本身继承了一些拓扑错误。我可以粗暴地识别这些组件:

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个连接的组件,而应该只有一个。为什么会发生这种情况


显然有些东西不正常工作。你能提供case_study.shp以便我们进行调查吗?我想如果我能给你发几张图片,连同
case_study.shp
,让你看看发生了什么事情,那将是最有益的。对于我在问题中所指出的,添加一个事实,即每当您向
案例研究.shp
中添加一个新段,以弥补其他两个未正确连接的段之间的差距时,
nx.read\u shp
将此新段视为一个新组件,尽管它已连接到现有组件。它还将此新线段缩短,好像绘制它不是为了弥合两点之间的全部间隙,而只是其中的一部分,最后只有一条未连接的边。@Aric你能理解这一点吗?显然有些地方不正常。你能提供case_study.shp以便我们进行调查吗?我想如果我能给你发几张图片,连同
case_study.shp
,让你看看发生了什么事情,那将是最有益的。对于我在问题中所指出的,添加一个事实,即每当您向
案例研究.shp
中添加一个新段,以弥补其他两个未正确连接的段之间的差距时,
nx.read\u shp
将此新段视为一个新组件,尽管它已连接到现有组件。它还将新线段缩短,就好像绘制它不是为了桥接两点之间的全部间隙,而是它的一部分,最后是一条未连接的边。@Aric你能理解吗?