NetworkX:为什么有些连接组件在没有连接时被视为断开连接?

时间:2017-02-11 12:18:15

标签: 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.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

这意味着从shapefile本身继承了一些拓扑错误。我可以粗暴地识别这些组件:

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

结果: enter image description here

图表应该只有两个组件:一个用黑色划线,另一个用灰色划线。

我的问题:如果我在红紫黄色区域周围放大,我发现节点确实连接了,所以不应该有3个连接的组件,而只是一个。为什么会这样?

enter image description here

0 个答案:

没有答案