用Python字典创建networkx图

11

我需要用networkX或任何其他的Python图形库来帮助处理问题。我有一个包含键和每个键对应几个值的字典:

{nan: array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
 'BBDD': array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
 'AAAD': array(['BBDD', nan, nan, nan, nan, nan, nan], dtype=object),
 'AAFF': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
 'MMCC': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
 'KKLL': array(['AAFF', 'MMCC', 'AAAD', 'BBDD', nan, nan, nan], dtype=object),
 'GGHH': array(['KKLL', 'NI4146', 'MMCC', nan, nan, nan, nan],dtype=object), ...}

现在我的问题是,我该如何将此字典中的数据放入图形中,其中键将成为节点,值将成为边。哪种方式最适合遍历字典?

import networkx as nx
import matplotlib.pyplot as plt

g = nx.DiGraph()
g.add_nodes_from([1,2,3,4,5])
g.add_edge(1,2)
g.add_edge(4,2)
g.add_edge(3,5)
g.add_edge(2,3)
g.add_edge(5,4)

nx.draw(g,with_labels=True)
plt.draw()
plt.show()

它应该是这样的,但使用其他数据


为什么你使用一个字符串的numpy数组而不是普通的字符串列表? - Ignacio Vergara Kausel
我真的不确定你在说什么,我是一个完全的初学者。但我猜你的意思是,因为我得到了第一个数据框,然后我将数据框转换为字典。@IgnacioVergaraKausel - jovicbg
2个回答

21

实际上,图可以通过字典简单地初始化。在这种情况下:

g = nx.DiGraph(d)

将返回您想要的图形。


10
假设您从以下内容开始:
d = {nan: array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
 'BBDD': array([nan, nan, nan, nan, nan, nan, nan], dtype=object),
 'AAAD': array(['BBDD', nan, nan, nan, nan, nan, nan], dtype=object),
 'AAFF': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
 'MMCC': array(['AAAD', nan, nan, nan, nan, nan, nan], dtype=object),
 'KKLL': array(['AAFF', 'MMCC', 'AAAD', 'BBDD', nan, nan, nan], dtype=object)}

然后,您可以像这样使用 add_nodes_from
g = nx.DiGraph()
g.add_nodes_from(d.keys())

并且像这样使用add_edges_from

for k, v in d.items():
    g.add_edges_from(([(k, t) for t in v]))

请注意,不需要假设节点是整数。
接下来,您可以看到:
>>> g.edges()
[(nan, nan),
 ('AAAD', 'BBDD'),
 ('AAAD', nan),
 ('MMCC', nan),
 ('MMCC', 'AAAD'),
 ('BBDD', nan),
 ('KKLL', 'BBDD'),
 ('KKLL', nan),
 ('KKLL', 'AAFF'),
 ('KKLL', 'AAAD'),
 ('KKLL', 'MMCC'),
 ('AAFF', nan),
 ('AAFF', 'AAAD')]

​

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接