NetworkX Graph中所有节点之间的边缘

时间:2016-03-18 06:40:04

标签: python matplotlib graph networkx

我可以在任意两个节点之间添加边缘,如下所示:

G.add_edge(node1, node)

但是如果我想在任意两个节点之间进行边缘处理(所有节点应该彼此相邻),那么在采用大量节点时就会变得很困难。

示例: 如果数字是节点是4,它们是1,2,3,4。图形应该如下所示 enter image description here

对于上图,我按如下方式添加节点:

graph = [(1, 2),(1, 3),(1, 4), (2, 3),(2, 4), (3, 4)]
for edge in graph:
        G.add_edge(edge[0], edge[1])

根据我的要求,Graph构造中是否有任何默认选项作为参数?

基本上我需要为给定的节点构建一个集团。

谢谢

1 个答案:

答案 0 :(得分:4)

根据您的描述,我认为您正在尝试制作完整的图表。 Networkx有一个内置的方法来创建一个完整的图形。

import networkx as nx
G=nx.complete_graph(4)
G.edges()
>[(0, 1), (0, 2), (0, 3), (1, 2), (1, 3), (2, 3)]

如果您不希望将节点命名为0,1,2,3,则可以使用其他名称重命名G中的节点。按照上面的命令:

nodenames = ['a', 'b', 'c', 'd']
mapping = {i:nodename for i,nodename in enumerate(nodenames)}
#now mapping looks like {0:'a', 1:'b', ...}
H=nx.relabel_nodes(G,mapping)
H.edges()
> [('a', 'c'), ('a', 'b'), ('a', 'd'), ('c', 'b'), ('c', 'd'), ('b', 'd')]

(注意 - 我不喜欢我用来定义mapping的词典理解 - 如果有人能给我一个不需要枚举的直接版本,我会很感激。)