为什么我的networkx图表在节点之间没有显示边缘?

时间:2017-10-12 08:07:38

标签: python graph networkx

我有两个清单。其中一个具有这种数据结构:在每一行中,第一个元素是ID,第二个是电子邮件地址。

     ['0', 'kvogel@politico.com']
     ['1','ababab@politico.com']

第二个名单是一个"谁写信给谁"列表,在每一行中,第一个ID号码是发件人,第二个ID是收件人

     ['0', '4']
     ['0', '6']
     ['1', '4']

顺便说一下,括号实际上并不是列表的一部分。这是我的jupyter笔记本输出。第一个列表大约有2000个,第二个列表有40000个行。在下面的代码中,我从第一个列表添加节点 - 在本例中是电子邮件地址。然后我遍历第二个列表并使用给定的ID在节点之间创建边缘。

    first =-1
    second =-1
    for row in idsList:
         g.add_nodes_from(row[1])
    for row in dncList:
        for i in range (len(idsList)):
            if (row[0]==idsList[i][0]):
                first=i;
            elif(row[1]==idsList[i][0]):
                second=i
        g.add_edge(idsList[first][1],idsList[second][1])
    nx.draw_networkx(g,with_labels = False, node_size = 30)
    plt.show()

但是,我无法看到节点之间的边缘。上面的代码生成下图。用edges()打印给我列出了所有边缘,所以没问题。我在这里失踪了什么?

Graph

2 个答案:

答案 0 :(得分:2)

您的图表目前看起来未定向。您应该更改此设置并使其成为有向图,除非您应该使其无向。应该解决它。

g = nx.DiGraph()

答案 1 :(得分:0)

您的边缘生成可能存在问题。例如,sec未定义,firstsecond可能会保留上一次迭代。

如果您将第一个列表转换为词典,则不会需要第二个循环。这是定义图表的更快捷方式:

import networkx as nx
import matplotlib.pyplot as plt

l1 = [ ['0', 'kvogel@politico.com'],
     ['1','ababab@politico.com'],
     ['2','c'],
     ['3','d'],
     ['4','e']
      ]

l2 = [['0', '4'],
     ['0', '2'],
     ['2', '3'],
     ['1', '3'],
     ['1', '2'],
     ['1', '4']]

addresses = dict(l1)

g = nx.Graph()
for address in addresses.values():
    g.add_node(address)

for i1, i2 in l2:
    g.add_edge(addresses[i1], addresses[i2])

nx.draw_networkx(g,with_labels = False, node_size = 30)
plt.show()

输出: enter image description here